@lunora/react 1.0.0-alpha.26 → 1.0.0-alpha.260

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.
Files changed (80) hide show
  1. package/README.md +28 -18
  2. package/dist/index.d.mts +1036 -583
  3. package/dist/index.d.ts +1036 -583
  4. package/dist/index.mjs +1 -25
  5. package/dist/packem_shared/AuthLoading-BNDsvgQ4.mjs +2 -0
  6. package/dist/packem_shared/LunoraProvider-B5zAiX86.mjs +1 -0
  7. package/dist/packem_shared/hydratePreloaded-B6d3r_u1.mjs +2 -0
  8. package/dist/packem_shared/lunora-provider-CW9Gd-pp.mjs +2 -0
  9. package/dist/packem_shared/lunoraQueryOptions-IJB_aFzi.mjs +1 -0
  10. package/dist/packem_shared/query-core-CqnQ_-E5.mjs +2 -0
  11. package/dist/packem_shared/query-key-BysXrewF.mjs +1 -0
  12. package/dist/packem_shared/query-options.d-CdgGQ9s4.d.mts +38 -0
  13. package/dist/packem_shared/query-options.d-CdgGQ9s4.d.ts +38 -0
  14. package/dist/packem_shared/stream-state-abygFxmy.mjs +1 -0
  15. package/dist/packem_shared/use-paginated-core-D9QnfDFs.mjs +2 -0
  16. package/dist/packem_shared/useAction-DnbG-lGf.mjs +2 -0
  17. package/dist/packem_shared/useAgent-C4XTDKr3.mjs +2 -0
  18. package/dist/packem_shared/useAgentApprovals-DIrIfUkR.mjs +2 -0
  19. package/dist/packem_shared/useAgentChat-DgdA3BU5.mjs +2 -0
  20. package/dist/packem_shared/useAgentState-CZkoGPL4.mjs +2 -0
  21. package/dist/packem_shared/useAgentToolEvents-BrIFgqyT.mjs +2 -0
  22. package/dist/packem_shared/useAuth-Do03WzEi.mjs +2 -0
  23. package/dist/packem_shared/useAuthSessions-BYqSu44Q.mjs +2 -0
  24. package/dist/packem_shared/useAuthState-CR-hIsvP.mjs +2 -0
  25. package/dist/packem_shared/useClientQuery-47csppXE.mjs +2 -0
  26. package/dist/packem_shared/useConnectionStatus-B4A2Vw8x.mjs +2 -0
  27. package/dist/packem_shared/useFlag-DhCr93VG.mjs +2 -0
  28. package/dist/packem_shared/useHttpStream-D0biamGu.mjs +2 -0
  29. package/dist/packem_shared/useInfiniteQuery-C6B9M0s9.mjs +2 -0
  30. package/dist/packem_shared/useLiveTopic-COTTJo8q.mjs +2 -0
  31. package/dist/packem_shared/useMutation-DmI3aZBl.mjs +2 -0
  32. package/dist/packem_shared/useMutator-BtUd-xEA.mjs +2 -0
  33. package/dist/packem_shared/usePaginatedQuery-CK5xnM3r.mjs +2 -0
  34. package/dist/packem_shared/usePresence-Bgw_pYzz.mjs +2 -0
  35. package/dist/packem_shared/useQuery-CHjpBW-E.mjs +2 -0
  36. package/dist/packem_shared/useRateLimit-Cckxi8m9.mjs +2 -0
  37. package/dist/packem_shared/useStream-De5SDR6Y.mjs +2 -0
  38. package/dist/packem_shared/useSubscription-CC39EoMT.mjs +2 -0
  39. package/dist/packem_shared/useSuspenseQuery-ZsmWeJKm.mjs +2 -0
  40. package/dist/packem_shared/useVoiceAgent-TyztaWYJ.mjs +2 -0
  41. package/dist/payment.d.mts +107 -0
  42. package/dist/payment.d.ts +107 -0
  43. package/dist/payment.mjs +2 -0
  44. package/dist/server.d.mts +47 -29
  45. package/dist/server.d.ts +47 -29
  46. package/dist/server.mjs +1 -31
  47. package/dist/upload.d.mts +24 -0
  48. package/dist/upload.d.ts +24 -0
  49. package/dist/upload.mjs +2 -0
  50. package/package.json +14 -4
  51. package/dist/packem_shared/AuthLoading-DezUWNB2.mjs +0 -33
  52. package/dist/packem_shared/CheckoutButton-DUite8jJ.mjs +0 -189
  53. package/dist/packem_shared/LunoraProvider-BsuiW4Lk.mjs +0 -81
  54. package/dist/packem_shared/cache-D1O_xfAe.mjs +0 -80
  55. package/dist/packem_shared/hydratePreloaded-uMDH_xA9.mjs +0 -54
  56. package/dist/packem_shared/lunoraQueryOptions-C3uwOTMW.mjs +0 -16
  57. package/dist/packem_shared/query-key-BmCbgidV.mjs +0 -13
  58. package/dist/packem_shared/query-options.d-D4okOpO8.d.mts +0 -38
  59. package/dist/packem_shared/query-options.d-D4okOpO8.d.ts +0 -38
  60. package/dist/packem_shared/stable-key-CGp4e2Ux.mjs +0 -38
  61. package/dist/packem_shared/use-paginated-core-DafedU4l.mjs +0 -179
  62. package/dist/packem_shared/useAgent-DwLxTc3P.mjs +0 -101
  63. package/dist/packem_shared/useAgentChat-WPm5iHgR.mjs +0 -283
  64. package/dist/packem_shared/useAgentState-Cikdlomg.mjs +0 -37
  65. package/dist/packem_shared/useAgentToolEvents-BM7ERo00.mjs +0 -129
  66. package/dist/packem_shared/useAuth-BSutjJaa.mjs +0 -129
  67. package/dist/packem_shared/useAuthState-CyF35qZR.mjs +0 -36
  68. package/dist/packem_shared/useClientQuery-CN1sC3cP.mjs +0 -56
  69. package/dist/packem_shared/useConnectionStatus-PJ7vyCHy.mjs +0 -30
  70. package/dist/packem_shared/useFlag-C2Pkghli.mjs +0 -128
  71. package/dist/packem_shared/useInfiniteQuery-BeaehE9f.mjs +0 -97
  72. package/dist/packem_shared/useMutation-BeqeIjTr.mjs +0 -67
  73. package/dist/packem_shared/useMutator-IIrLtDiM.mjs +0 -47
  74. package/dist/packem_shared/usePaginatedQuery-_6ETVUmf.mjs +0 -46
  75. package/dist/packem_shared/usePresence-Rnx1Fznc.mjs +0 -115
  76. package/dist/packem_shared/useQuery-C-hDzP-t.mjs +0 -77
  77. package/dist/packem_shared/useRateLimit-DTEffQEi.mjs +0 -64
  78. package/dist/packem_shared/useStream-CGC26afa.mjs +0 -128
  79. package/dist/packem_shared/useSubscription-D38Jdyr8.mjs +0 -139
  80. package/dist/packem_shared/useVoiceAgent-sC5_ADB8.mjs +0 -416
package/dist/index.mjs CHANGED
@@ -1,26 +1,2 @@
1
1
  'use client';
2
- export { AuthLoading, Authenticated, Unauthenticated } from './packem_shared/AuthLoading-DezUWNB2.mjs';
3
- export { useAuthState } from './packem_shared/useAuthState-CyF35qZR.mjs';
4
- export { LunoraProvider, useLunora } from './packem_shared/LunoraProvider-BsuiW4Lk.mjs';
5
- export { CheckoutButton, CustomerPortalButton, useCheckout } from './packem_shared/CheckoutButton-DUite8jJ.mjs';
6
- export { lunoraQueryOptions } from './packem_shared/lunoraQueryOptions-C3uwOTMW.mjs';
7
- export { useAgent } from './packem_shared/useAgent-DwLxTc3P.mjs';
8
- export { useAgentChat } from './packem_shared/useAgentChat-WPm5iHgR.mjs';
9
- export { useAgentState } from './packem_shared/useAgentState-Cikdlomg.mjs';
10
- export { useAgentToolEvents } from './packem_shared/useAgentToolEvents-BM7ERo00.mjs';
11
- export { default as useAuth } from './packem_shared/useAuth-BSutjJaa.mjs';
12
- export { default as useClientQuery } from './packem_shared/useClientQuery-CN1sC3cP.mjs';
13
- export { default as useConnectionStatus } from './packem_shared/useConnectionStatus-PJ7vyCHy.mjs';
14
- export { useFlag, useFlags } from './packem_shared/useFlag-C2Pkghli.mjs';
15
- export { default as useInfiniteQuery } from './packem_shared/useInfiniteQuery-BeaehE9f.mjs';
16
- export { useMutation } from './packem_shared/useMutation-BeqeIjTr.mjs';
17
- export { useMutator } from './packem_shared/useMutator-IIrLtDiM.mjs';
18
- export { usePaginatedQuery } from './packem_shared/usePaginatedQuery-_6ETVUmf.mjs';
19
- export { hydratePreloaded, default as usePreloadedQuery } from './packem_shared/hydratePreloaded-uMDH_xA9.mjs';
20
- export { usePresence } from './packem_shared/usePresence-Rnx1Fznc.mjs';
21
- export { default as useQuery } from './packem_shared/useQuery-C-hDzP-t.mjs';
22
- export { useRateLimit } from './packem_shared/useRateLimit-DTEffQEi.mjs';
23
- export { useStream } from './packem_shared/useStream-CGC26afa.mjs';
24
- export { default as useSubscription } from './packem_shared/useSubscription-D38Jdyr8.mjs';
25
- export { useVoiceAgent } from './packem_shared/useVoiceAgent-sC5_ADB8.mjs';
26
- export { createClientQuery, getErrorCode, getRetryAfterMs, isConflictError, isForbiddenError, isRateLimitedError, isUnauthorizedError } from '@lunora/client';
2
+ import{AuthLoading as o,Authenticated as t,Unauthenticated as u}from"./packem_shared/AuthLoading-BNDsvgQ4.mjs";import{useAuthState as a}from"./packem_shared/useAuthState-CR-hIsvP.mjs";import{L as f,u as n}from"./packem_shared/lunora-provider-CW9Gd-pp.mjs";import{lunoraQueryOptions as m}from"./packem_shared/lunoraQueryOptions-IJB_aFzi.mjs";import{useAction as d}from"./packem_shared/useAction-DnbG-lGf.mjs";import{useAuthSessions as A,useAuthUsers as g,useImpersonate as c,useOrganizations as h,useSignUpInvitations as U}from"./packem_shared/useAuthSessions-BYqSu44Q.mjs";import{useAgent as S}from"./packem_shared/useAgent-C4XTDKr3.mjs";import{useAgentApprovals as E}from"./packem_shared/useAgentApprovals-DIrIfUkR.mjs";import{useAgentChat as L}from"./packem_shared/useAgentChat-DgdA3BU5.mjs";import{useAgentState as v}from"./packem_shared/useAgentState-CZkoGPL4.mjs";import{useAgentToolEvents as F}from"./packem_shared/useAgentToolEvents-BrIFgqyT.mjs";import{default as M}from"./packem_shared/useAuth-Do03WzEi.mjs";import{default as b}from"./packem_shared/useClientQuery-47csppXE.mjs";import{default as O}from"./packem_shared/useConnectionStatus-B4A2Vw8x.mjs";import{useFlag as H,useFlags as V}from"./packem_shared/useFlag-DhCr93VG.mjs";import{useHttpStream as q}from"./packem_shared/useHttpStream-D0biamGu.mjs";import{default as B}from"./packem_shared/useInfiniteQuery-C6B9M0s9.mjs";import{useLiveTopic as G}from"./packem_shared/useLiveTopic-COTTJo8q.mjs";import{useMutation as K}from"./packem_shared/useMutation-DmI3aZBl.mjs";import{useMutator as W}from"./packem_shared/useMutator-BtUd-xEA.mjs";import{usePaginatedQuery as Y}from"./packem_shared/usePaginatedQuery-CK5xnM3r.mjs";import{hydratePreloaded as _,default as $}from"./packem_shared/hydratePreloaded-B6d3r_u1.mjs";import{usePresence as re}from"./packem_shared/usePresence-Bgw_pYzz.mjs";import{default as te}from"./packem_shared/useQuery-CHjpBW-E.mjs";import{useRateLimit as se}from"./packem_shared/useRateLimit-Cckxi8m9.mjs";import{useStream as pe}from"./packem_shared/useStream-De5SDR6Y.mjs";import{default as ne}from"./packem_shared/useSubscription-CC39EoMT.mjs";import{default as me}from"./packem_shared/useSuspenseQuery-ZsmWeJKm.mjs";import{useVoiceAgent as de}from"./packem_shared/useVoiceAgent-TyztaWYJ.mjs";import{createClientQuery as Ae,getErrorCode as ge,getRetryAfterMs as ce,isConflictError as he,isForbiddenError as Ue,isRateLimitedError as ye,isUnauthorizedError as Se}from"@lunora/client";import{RestrictionError as Ee,UploadControl as Qe,UploadError as Le}from"@visulima/storage-client";import{useChunkedRestUpload as ve,useFileInput as Re,useMultipartUpload as Fe,usePasteUpload as Ie,useTusUpload as Me,useUpload as Te}from"@visulima/storage-client/react";export{o as AuthLoading,t as Authenticated,f as LunoraProvider,Ee as RestrictionError,u as Unauthenticated,Qe as UploadControl,Le as UploadError,Ae as createClientQuery,ge as getErrorCode,ce as getRetryAfterMs,_ as hydratePreloaded,he as isConflictError,Ue as isForbiddenError,ye as isRateLimitedError,Se as isUnauthorizedError,m as lunoraQueryOptions,d as useAction,S as useAgent,E as useAgentApprovals,L as useAgentChat,v as useAgentState,F as useAgentToolEvents,M as useAuth,A as useAuthSessions,a as useAuthState,g as useAuthUsers,ve as useChunkedRestUpload,b as useClientQuery,O as useConnectionStatus,Re as useFileInput,H as useFlag,V as useFlags,q as useHttpStream,c as useImpersonate,B as useInfiniteQuery,G as useLiveTopic,n as useLunora,Fe as useMultipartUpload,K as useMutation,W as useMutator,h as useOrganizations,Y as usePaginatedQuery,Ie as usePasteUpload,$ as usePreloadedQuery,re as usePresence,te as useQuery,se as useRateLimit,U as useSignUpInvitations,pe as useStream,ne as useSubscription,me as useSuspenseQuery,Me as useTusUpload,Te as useUpload,de as useVoiceAgent};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{useAuthState as o}from"./useAuthState-CR-hIsvP.mjs";const s=t=>{const{children:n}=t,{isAuthenticated:i}=o();return i?n:void 0},d=t=>{const{children:n}=t,{isAuthenticated:i,isLoading:e}=o();return!e&&!i?n:void 0},r=t=>{const{children:n}=t,{isLoading:i}=o();return i?n:void 0};export{r as AuthLoading,s as Authenticated,d as Unauthenticated};
@@ -0,0 +1 @@
1
+ import{L as e,u as o,a as u}from"./lunora-provider-CW9Gd-pp.mjs";export{e as LunoraProvider,o as useLunora,u as useLunoraClientSwapped};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as K}from"react/compiler-runtime";import{useQueryClient as P,useQuery as N}from"@tanstack/react-query";import{useRef as T,useEffect as I,useSyncExternalStore as w,useState as x}from"react";import{u as F,g as L,a as O}from"./lunora-provider-CW9Gd-pp.mjs";import{l as V,s as z}from"./query-key-BysXrewF.mjs";const D=function(o,r){const e=K(11);let s;e[0]!==r?(s=r===void 0?{}:r,e[0]=r,e[1]=s):s=e[1];const i=s,t=F(),n=P(),S=T(i.onError);let c;e[2]!==i.onError?(c=()=>{S.current=i.onError},e[2]=i.onError,e[3]=c):c=e[3],I(c);let u;e[4]===Symbol.for("react.memo_cache_sentinel")?(u=h=>{S.current?.(h)},e[4]=u):u=e[4];const b=u,m=L(t);let a;e[5]!==t?(a=()=>t.identityEpoch(),e[5]=t,e[6]=a):a=e[6];const _=w(m.subscribeIdentityEpoch,a,Y),[Q]=x(t),R=O(),{args:p,functionPath:q,shardKey:l}=o,g=_===0&&!R&&t===Q?o.value:void 0,d={__lunoraRef:q},f=V(d,p,l),{data:v}=N({initialData:g,queryFn:async h=>{const{signal:C}=h;return m.liveValue(n,f,C,{fetch:async()=>t.query(d,p,{shardKey:l}),shardKey:l})},queryKey:f,staleTime:Number.POSITIVE_INFINITY}),E=z(f);let y;return e[7]!==t||e[8]!==n||e[9]!==E?(y=[t,n,E,b],e[7]=t,e[8]=n,e[9]=E,e[10]=y):y=e[10],I(()=>m.attach(n,f,d,p,l,{onError:b}),y),v===void 0?g:v},G=function(o,r={}){return D(o,r)};function Y(){return 0}export{D as default,G as hydratePreloaded};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as W}from"react/compiler-runtime";import{LunoraError as D}from"@lunora/errors";import{QueryClientContext as M,QueryClientProvider as A,QueryClient as N}from"@tanstack/react-query";import{use as Q,useState as S,useEffect as T,useRef as R,createContext as x}from"react";import{k as b}from"./query-key-BysXrewF.mjs";import{jsx as m}from"react/jsx-runtime";const E=n=>{n!==void 0&&(n.cancel({silent:!0}),n.setState({...n.state,data:void 0,dataUpdatedAt:0,error:null,fetchStatus:"idle",status:"pending"}))},I={status:"idle"},F=(n,e)=>{for(const s of n.waiters)s(e);n.waiters.clear()},_=1e4,z=async(n,e,s)=>new Promise((i,d)=>{if(e.aborted){d(e.reason);return}let u,h;const l=()=>{clearTimeout(u),h?.(),n.waiters.delete(r),e.removeEventListener("abort",t)},t=()=>{l(),d(e.reason)},r=c=>{l(),i(c)};u=setTimeout(()=>{r(!1)},_),n.waiters.add(r),e.addEventListener("abort",t,{once:!0}),h=s(()=>{r(!1)}),n.waiters.has(r)||h()});class U{constructor(e){this.client=e}client;entries=new Map;live=new Map;identityWatched=new Set;listening=!1;hasConsumers(e){return this.entries.has(b(e))}async liveValue(e,s,i,d){const{fetch:u,shardKey:h,waitForPush:l=!0}=d;if(!("window"in globalThis)||this.client.getWebSocketImpl()===void 0)return u();const t=b(s),r=this.liveFor(t),c=r.state.status==="pushed"?e.getQueryData(s)??r.state.value:void 0;if(c!==void 0)return c;if(l&&r.state.status!=="errored"&&!this.client.isCrossTabFollower()&&this.client.expectsPush({shardKey:h})){let o;try{o=await z(r,i,f=>this.client.onConnectionStatus(()=>{this.client.expectsPush({shardKey:h})||f()}))}finally{this.forgetIdleLive(t)}if(o)return this.liveValue(e,s,i,d)}const p=r.state;let a;try{a=await u()}finally{this.forgetIdleLive(t)}if(r.state!==p&&r.state.status==="pushed"){const o=e.getQueryData(s);return o!==void 0?o:r.state.value}return a}clearOnIdentityChange(e){this.listenForIdentityChange(),this.identityWatched.add(e)}stopClearingOnIdentityChange(e){this.identityWatched.delete(e)}subscribeIdentityEpoch=e=>(this.listenForIdentityChange(),this.client.onIdentityChange(e));listenForIdentityChange(){this.listening||(this.listening=!0,this.client.onIdentityChange(()=>{for(const e of this.identityWatched)this.clearQueries(e)}))}clearQueries(e){const s=e.getQueryCache();for(const i of s.findAll({queryKey:["lunora"]}))E(i),i.getObserversCount()===0&&!this.hasConsumers(i.queryKey)&&s.remove(i)}attach(e,s,i,d,u,h={}){const l=b(s);let t=this.entries.get(l);if(!t){t={clients:new Map([[e,0]]),errorCallbacks:new Set,unsubscribe:void 0},this.entries.set(l,t);const a=t;try{t.unsubscribe=this.client.subscribe(i,d,o=>{const f=this.liveFor(l);if(o===void 0){f.state=I;for(const v of a.clients.keys())E(v.getQueryCache().find({exact:!0,queryKey:s}));return}for(const v of a.clients.keys())v.setQueryData(s,o);f.state={status:"pushed",value:o},F(f,!0)},{onError:o=>{const f=this.liveFor(l);f.state.status!=="pushed"&&(f.state={status:"errored"},F(f,!1));for(const v of a.errorCallbacks)v(o)},shardKey:u})}catch(o){throw this.entries.delete(l),this.dropLive(l),o}}t.clients.set(e,(t.clients.get(e)??0)+1);const r=this.live.get(l);r?.state.status==="pushed"&&e.setQueryData(s,r.state.value);const{onError:c}=h;c&&t.errorCallbacks.add(c);let p=!1;return()=>{if(p)return;p=!0;const a=this.entries.get(l);if(!a)return;const o=(a.clients.get(e)??1)-1;o>0?a.clients.set(e,o):a.clients.delete(e),c&&a.errorCallbacks.delete(c),a.clients.size===0&&(a.unsubscribe?.(),this.entries.delete(l),this.dropLive(l))}}liveFor(e){let s=this.live.get(e);return s||(s={state:I,waiters:new Set},this.live.set(e,s)),s}forgetIdleLive(e){!this.entries.has(e)&&this.live.get(e)?.waiters.size===0&&this.live.delete(e)}dropLive(e){const s=this.live.get(e);s!==void 0&&(s.waiters.size===0?this.live.delete(e):s.state=I)}}const k=new WeakMap,L=n=>{let e=k.get(n);return e||(e=new U(n),k.set(n,e)),e},P=x(null),O=x(!1),V=()=>new N({defaultOptions:{mutations:{retry:0},queries:{gcTime:5*6e4,retry:0,staleTime:Number.POSITIVE_INFINITY}}}),J=n=>{const e=W(20),{children:s,client:i,queryClient:d}=n,u=Q(M);let h;e[0]!==u||e[1]!==d?(h=()=>d??u??V(),e[0]=u,e[1]=d,e[2]=h):h=e[2];const[l]=S(h),t=d??u??l;let r,c;e[3]!==i||e[4]!==t?(r=()=>{L(i).clearOnIdentityChange(t)},c=[i,t],e[3]=i,e[4]=t,e[5]=r,e[6]=c):(r=e[5],c=e[6]),T(r,c);const p=R(i);let a,o;e[7]!==i||e[8]!==t?(a=()=>{p.current!==i&&(L(p.current).stopClearingOnIdentityChange(t),p.current=i,L(i).clearQueries(t),t.invalidateQueries({queryKey:["lunora"]}))},o=[i,t],e[7]=i,e[8]=t,e[9]=a,e[10]=o):(a=e[9],o=e[10]),T(a,o);const[f]=S(i),v=i!==f;let g;e[11]!==s||e[12]!==v?(g=m(O,{value:v,children:s}),e[11]=s,e[12]=v,e[13]=g):g=e[13];let w;e[14]!==i||e[15]!==g?(w=m(P,{value:i,children:g}),e[14]=i,e[15]=g,e[16]=w):w=e[16];const C=w;if(u===t)return C;let y;return e[17]!==C||e[18]!==t?(y=m(A,{client:t,children:C}),e[17]=C,e[18]=t,e[19]=y):y=e[19],y},X=()=>Q(O),Z=()=>{const n=Q(P);if(!n)throw new D("INTERNAL","useLunora must be used inside <LunoraProvider />");return n};export{J as L,X as a,L as g,Z as u};
@@ -0,0 +1 @@
1
+ import{l as u}from"./query-key-BysXrewF.mjs";const t=(a,r,s,e={})=>{const y=s??{};return{queryFn:()=>a.query(r,y,{shardKey:e.shardKey}),queryKey:u(r,y,e.shardKey),staleTime:Number.POSITIVE_INFINITY}};export{t as lunoraQueryOptions};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as R}from"react/compiler-runtime";import{useRef as $,useEffect as b}from"react";import{g as h}from"./lunora-provider-CW9Gd-pp.mjs";const x=g=>{const e=R(16),{args:a,argsKey:E,client:r,function_:n,onError:s,queryClient:t,queryKey:m,shardKey:i,skipped:o}=g,p=`${n.__lunoraRef}\0${E}\0${i??""}`,y=$(s);let c;e[0]!==s?(c=()=>{y.current=s},e[0]=s,e[1]=c):c=e[1],b(c);let u;e[2]===Symbol.for("react.memo_cache_sentinel")?(u=K=>{y.current?.(K)},e[2]=u):u=e[2];const _=u;let f;e[3]!==a||e[4]!==r||e[5]!==n||e[6]!==t||e[7]!==m||e[8]!==i||e[9]!==o?(f=()=>o?S:h(r).attach(t,m,n,a,i,{onError:_}),e[3]=a,e[4]=r,e[5]=n,e[6]=t,e[7]=m,e[8]=i,e[9]=o,e[10]=f):f=e[10];let l;e[11]!==r||e[12]!==t||e[13]!==o||e[14]!==p?(l=[r,t,p,o,_],e[11]=r,e[12]=t,e[13]=o,e[14]=p,e[15]=l):l=e[15],b(f,l)};function S(){}export{x as u};
@@ -0,0 +1 @@
1
+ import{stableWireKey as a}from"@lunora/wire";const o=e=>a(e),l=(e,r,s)=>["lunora",e,r,s??null],y=(e,r,s)=>l(e.__lunoraRef,a(r),s),u=e=>o(e);export{l as a,o as k,y as l,u as s};
@@ -0,0 +1,38 @@
1
+ import { FunctionReference, ReturnOf, LunoraClient, ArgsOf } from '@lunora/client';
2
+ import { QueryKey } from '@tanstack/react-query';
3
+ /**
4
+ * Pure, transport-free adapter between a Lunora function reference and a
5
+ * TanStack Query options object. No `"use client"` directive and only a
6
+ * type-level `@lunora/client` import, so it is safe to use on either side of an
7
+ * RSC boundary (the runtime transport is the `LunoraClient` you pass in).
8
+ *
9
+ * Use it when you want to drive a Lunora query through TanStack's own hooks —
10
+ * `useSuspenseQuery`, `useQueries`, or the server-side
11
+ * `queryClient.ensureQueryData` / `prefetchQuery` — rather than the first-class
12
+ * `useQuery` from `@lunora/react`.
13
+ */
14
+ /** Shape returned by `lunoraQueryOptions`, spread into a TanStack hook. */
15
+ interface LunoraQueryOptions<F extends FunctionReference> {
16
+ queryFn: () => Promise<ReturnOf<F>>;
17
+ queryKey: QueryKey;
18
+ staleTime: number;
19
+ }
20
+ /**
21
+ * Build a TanStack Query options object for a Lunora query, keyed identically
22
+ * to the first-class hooks (see `lunoraQueryKey`) so a value fetched through
23
+ * this adapter shares cache identity with anything `useQuery` /
24
+ * `prefetchQuery` reads or writes for the same `(fn, args, shardKey)` triple.
25
+ *
26
+ * ```ts
27
+ * const { data } = useSuspenseQuery(lunoraQueryOptions(client, api.posts.list, {}));
28
+ * ```
29
+ *
30
+ * This is a one-shot fetch: it resolves once and `staleTime` is infinite, so
31
+ * TanStack never refetches on its own. It does not open a WebSocket — for live
32
+ * updates that re-render on every server push, use `useQuery` from
33
+ * `@lunora/react`, which attaches a shared subscription to the same cache key.
34
+ */
35
+ declare const lunoraQueryOptions: <F extends FunctionReference>(client: LunoraClient, function_: F, args: ArgsOf<F>, options?: {
36
+ shardKey?: string;
37
+ }) => LunoraQueryOptions<F>;
38
+ export { LunoraQueryOptions as L, lunoraQueryOptions as l };
@@ -0,0 +1,38 @@
1
+ import { FunctionReference, ReturnOf, LunoraClient, ArgsOf } from '@lunora/client';
2
+ import { QueryKey } from '@tanstack/react-query';
3
+ /**
4
+ * Pure, transport-free adapter between a Lunora function reference and a
5
+ * TanStack Query options object. No `"use client"` directive and only a
6
+ * type-level `@lunora/client` import, so it is safe to use on either side of an
7
+ * RSC boundary (the runtime transport is the `LunoraClient` you pass in).
8
+ *
9
+ * Use it when you want to drive a Lunora query through TanStack's own hooks —
10
+ * `useSuspenseQuery`, `useQueries`, or the server-side
11
+ * `queryClient.ensureQueryData` / `prefetchQuery` — rather than the first-class
12
+ * `useQuery` from `@lunora/react`.
13
+ */
14
+ /** Shape returned by `lunoraQueryOptions`, spread into a TanStack hook. */
15
+ interface LunoraQueryOptions<F extends FunctionReference> {
16
+ queryFn: () => Promise<ReturnOf<F>>;
17
+ queryKey: QueryKey;
18
+ staleTime: number;
19
+ }
20
+ /**
21
+ * Build a TanStack Query options object for a Lunora query, keyed identically
22
+ * to the first-class hooks (see `lunoraQueryKey`) so a value fetched through
23
+ * this adapter shares cache identity with anything `useQuery` /
24
+ * `prefetchQuery` reads or writes for the same `(fn, args, shardKey)` triple.
25
+ *
26
+ * ```ts
27
+ * const { data } = useSuspenseQuery(lunoraQueryOptions(client, api.posts.list, {}));
28
+ * ```
29
+ *
30
+ * This is a one-shot fetch: it resolves once and `staleTime` is infinite, so
31
+ * TanStack never refetches on its own. It does not open a WebSocket — for live
32
+ * updates that re-render on every server push, use `useQuery` from
33
+ * `@lunora/react`, which attaches a shared subscription to the same cache key.
34
+ */
35
+ declare const lunoraQueryOptions: <F extends FunctionReference>(client: LunoraClient, function_: F, args: ArgsOf<F>, options?: {
36
+ shardKey?: string;
37
+ }) => LunoraQueryOptions<F>;
38
+ export { LunoraQueryOptions as L, lunoraQueryOptions as l };
@@ -0,0 +1 @@
1
+ const u=function(r,e){switch(e.type){case"chunk":return{chunks:[...r.chunks,e.chunk],error:void 0,status:"streaming"};case"complete":return{...r,status:"complete"};case"error":return{...r,error:e.error,status:"error"};case"reset":return{chunks:[],error:void 0,status:"idle"};case"start":return{...r,status:"streaming"};default:return r}},o=function(r,e){let n=!0,c=!1;const s=()=>{c||(c=!0,r.cancel())};return(async()=>{try{for await(const t of r){if(!n)return;e({chunk:t,type:"chunk"})}n&&e({type:"complete"})}catch(t){if(!n)return;e({error:t instanceof Error?t:new Error(String(t)),type:"error"})}})().catch(()=>{}),{cancel:s,cleanup:()=>{n=!1,s()}}};export{o as c,u as s};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{initialPages as T,rebalance as Y,derivePaginationStatus as D,applyLoadMore as _}from"@lunora/client/pagination";import{useQueryClient as B,CancelledError as G}from"@tanstack/react-query";import{useRef as m,useReducer as J,useState as z,useEffect as h,useCallback as U}from"react";import{u as W,g as X}from"./lunora-provider-CW9Gd-pp.mjs";import{s as u,l as I}from"./query-key-BysXrewF.mjs";const Z=function(i){const l=m(void 0);return l.current??=i(),l},oe=function(i,l,R){const y=W(),a=B(),{initialNumItems:S,shardKey:g}=R,f=l==="skip",p=f?{}:l,[,H]=J(e=>e+1,0),[P,K]=z(()=>T(S)),[V,k]=z(void 0),A=m(R.onError);h(()=>{A.current=R.onError});const E=`${u(I(i,p,g))}::${String(S)}`,x=m(E);x.current!==E&&(x.current=E,K(T(S)),k(void 0));const C=P.map(e=>{const t={...p,paginationOpts:{cursor:e.lower,endCursor:e.upper,numItems:e.numItems}},r=I(i,t,g);return{args:t,key:r}}),F=C.map(({key:e})=>u(e)).join("|"),b=m({baseArgs:p,entries:[],fn:i,shardKey:g});h(()=>{b.current={baseArgs:p,entries:C,fn:i,shardKey:g}});const L=(e,t,r)=>{k(r),K(n=>{const s=b.current,o=n.at(-1);if(n.length<=1||!o||a.getQueryData(t)!==void 0)return n;const v={...s.baseArgs,paginationOpts:{cursor:o.lower,endCursor:o.upper,numItems:o.numItems}};return u(I(s.fn,v,s.shardKey))===e?n.slice(0,-1):n}),A.current?.(r)},Q=Z(()=>new Map),M=m(y);h(()=>{const e=Q.current;if(M.current!==y){for(const s of e.values())s();e.clear(),M.current=y}if(f){for(const s of e.values())s();e.clear();return}const t=b.current,r=X(y),n=new Set(t.entries.map(({key:s})=>u(s)));for(const[s,o]of e)n.has(s)||(o(),e.delete(s));for(const s of t.entries){const o=u(s.key);if(e.has(o))continue;const v=async()=>y.query(t.fn,s.args,{shardKey:t.shardKey}),d=()=>{a.fetchQuery({gcTime:Number.POSITIVE_INFINITY,queryFn:async({signal:c})=>r.liveValue(a,s.key,c,{fetch:v,shardKey:t.shardKey}),queryKey:s.key,staleTime:0}).catch(c=>{if(c instanceof G){r.hasConsumers(s.key)&&d();return}L(o,s.key,c instanceof Error?{code:c.code,message:c.message}:{message:String(c)})})};d();const w=r.attach(a,s.key,t.fn,s.args,t.shardKey,{onError:O=>{L(o,s.key,O)}}),N=s.key;e.set(o,()=>{w(),r.hasConsumers(N)||a.removeQueries({exact:!0,queryKey:N})})}},[y,a,F,f]),h(()=>()=>{for(const e of Q.current.values())e();Q.current.clear()},[]),h(()=>{const e=a.getQueryCache(),t=new Set(C.map(({key:n})=>u(n)));return e.subscribe(n=>{if(n.type!=="updated")return;const s=u(n.query.queryKey);t.has(s)&&(k(void 0),H())})},[a,F]);const q=f?[]:C.map(({key:e})=>a.getQueryData(e));h(()=>{if(f)return;const e=Y(P,q);e&&K(e)});const{status:$}=D(f,q),j=U(e=>{k(void 0),K(t=>{const r=b.current,n=t.map(d=>{const w={...r.baseArgs,paginationOpts:{cursor:d.lower,endCursor:d.upper,numItems:d.numItems}};return a.getQueryData(I(r.fn,w,r.shardKey))}),{nextCursor:s,status:o}=D(!1,n);return _(t,o==="CanLoadMore"?s:void 0,e)??t})},[a]);return{error:V,loadMore:j,pageResults:q,status:$}};export{oe as u};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as R}from"react/compiler-runtime";import{createCallRunner as k}from"@lunora/client";import{useMutation as x}from"@tanstack/react-query";import{useState as n}from"react";import{u as C}from"./lunora-provider-CW9Gd-pp.mjs";const S=a=>{const t=R(12),i=C(),[c,g]=n(void 0),[l,m]=n(void 0),[u,M]=n(!1);let o;t[0]!==i||t[1]!==a?(o={mutationFn:async e=>{const{args:y,options:A}=e;return i.action(a,y,A)},networkMode:"always",retry:0},t[0]=i,t[1]=a,t[2]=o):o=t[2];const{mutateAsync:d,reset:p}=x(o);let s;t[3]!==d||t[4]!==p?(s=()=>({call:k(async(e,y)=>d({args:e,options:y}),{setError:m,setPending:M,setResult:e=>{g(()=>e),m(void 0)}}),reset:()=>{g(void 0),m(void 0),p()}}),t[3]=d,t[4]=p,t[5]=s):s=t[5];const[w]=n(s),{call:f,reset:v}=w;let r;return t[6]!==f||t[7]!==c||t[8]!==l||t[9]!==u||t[10]!==v?(r={call:f,data:c,error:l,pending:u,reset:v},t[6]=f,t[7]=c,t[8]=l,t[9]=u,t[10]=v,t[11]=r):r=t[11],r};export{S as useAction};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as N}from"react/compiler-runtime";import{useMutation as R}from"./useMutation-DmI3aZBl.mjs";import O from"./useSubscription-CC39EoMT.mjs";const b={__lunoraRef:""},F=_=>{const t=N(20),{api:A,cancel:a,onError:d,run:I,runArgs:f,threadKey:e}=_,s=R(I),T=R(a??b);let c;t[0]!==e?(c={key:e},t[0]=e,t[1]=c):c=t[1];let r;t[2]!==d?(r={onError:d},t[2]=d,t[3]=r):r=t[3];const{data:v,error:p}=O(A.agents.agentThread,c,r),n=v,g=n?.status,o=n?.instanceId,{mutate:m}=s,{mutate:M}=T;let i;t[4]!==f||t[5]!==m||t[6]!==e?(i=async(w,E)=>{await m({input:w,threadKey:e,...f,...E})},t[4]=f,t[5]=m,t[6]=e,t[7]=i):i=t[7];const h=i;let u;t[8]!==M||t[9]!==a||t[10]!==o||t[11]!==e?(u=async()=>{a===void 0||o===void 0||await M({instanceId:o,threadKey:e})},t[8]=M,t[9]=a,t[10]=o,t[11]=e,t[12]=u):u=t[12];const y=u;let l;return t[13]!==y||t[14]!==p||t[15]!==h||t[16]!==s.pending||t[17]!==g||t[18]!==n?(l={cancel:y,error:p,pending:s.pending,run:h,status:g,thread:n},t[13]=y,t[14]=p,t[15]=h,t[16]=s.pending,t[17]=g,t[18]=n,t[19]=l):l=t[19],l};export{F as useAgent};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as p}from"react/compiler-runtime";import c from"./useSubscription-CC39EoMT.mjs";const m=n=>{const e=p(4);let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t={},e[0]=t):t=e[0];const{data:a,error:r}=c(n.api.agents.agentPendingApprovals,t),s=a;let o;return e[1]!==r||e[2]!==s?(o={approvals:s,error:r},e[1]=r,e[2]=s,e[3]=o):o=e[3],o};export{m as useAgentApprovals};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{reconcileOptimistic as M,maxSeq as R}from"@lunora/client";import{useState as nt,useRef as k}from"react";import{u as rt}from"./lunora-provider-CW9Gd-pp.mjs";import{useMutation as s}from"./useMutation-DmI3aZBl.mjs";import{useStream as at}from"./useStream-De5SDR6Y.mjs";import d from"./useSubscription-CC39EoMT.mjs";const ot={__lunoraRef:""},st={__lunoraRef:""},ct=[],it=[],kt=A=>{const{api:r,cancel:m,limit:g,onError:i,send:E,sendArgs:_,stream:v,threadKey:e}=A,T=g===void 0?{key:e}:{key:e,limit:g},{data:w,error:x}=d(r.agents.agentMessages,T,{onError:i}),{data:G,error:I}=d(r.agents.agentThread,{key:e},{onError:i}),{data:O,error:b}=d(r.agents.agentApprovalGrants,{key:e},{onError:i}),C=v===void 0?"skip":{key:e},{chunks:D}=at(v??st,C),j=s(E),q=s(m??ot),F=s(r.agents.agentResolveApproval),N=s(r.agents.agentRevokeApprovalGrant),K=s(r.agents.agentDeclineSecret),P=rt(),[Y,u]=nt([]),h=k(0),f=k(e);f.current!==e&&(f.current=e,u([]));const y=G,L=y?.status,c=y?.instanceId,a=w??ct,S=M(Y,a),U=R(a),$=S.length===0?a:[...a,...S.map((t,n)=>({content:t.content,optimistic:!0,role:"user",seq:U+1+n}))],z=a.filter(t=>t.role==="assistant").length,B=D.filter(t=>t.kind!=="progress"&&t.threadKey===e&&t.turn>=z).map(t=>t.text).join(""),{mutate:H}=j,{mutate:J}=q,{mutate:Q}=F,{mutate:V}=N,{mutate:W}=K,X=async(t,n)=>{const o=h.current;h.current+=1;const Z=R(a);u(p=>[...M(p,a),{content:t,id:o,maxDurableSeqAtSend:Z}]);try{await H({input:t,threadKey:e,..._,...n})}catch(p){throw u(tt=>tt.filter(et=>et.id!==o)),p}},l=async(t,n,o)=>{if(c===void 0)throw new Error(`useAgentChat: cannot ${t} — no in-flight run (thread has no instanceId)`);await Q({decision:t,instanceId:c,threadKey:e,toolCallId:n,...o===void 0?{}:{note:o}})};return{approvalGrants:O??it,approve:(t,n)=>l("approve",t,n),approveForThread:(t,n)=>l("approve_for_thread",t,n),cancel:async()=>{m===void 0||c===void 0||await J({instanceId:c,threadKey:e})},declineSecret:async t=>{await W({threadKey:e,toolCallId:t})},error:x??I??b,messages:$,reject:(t,n)=>l("reject",t,n),revokeGrant:async t=>{await V({threadKey:e,toolName:t})},send:X,status:L,streamingText:B,supplySecret:async(t,n)=>{await P.mutation(r.agents.agentSupplySecret,{secret:n,threadKey:e,toolCallId:t},{onlineOnly:!0})}}};export{kt as useAgentChat};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as o}from"react/compiler-runtime";import d from"./useSubscription-CC39EoMT.mjs";const l=t=>{const e=o(5);let r;e[0]!==t.threadKey?(r={key:t.threadKey},e[0]=t.threadKey,e[1]=r):r=e[1];const{data:n,error:s}=d(t.api.agents.agentState,r),c=n;let a;return e[2]!==s||e[3]!==c?(a={error:s,state:c},e[2]=s,e[3]=c,e[4]=a):a=e[4],a};export{l as useAgentState};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as C}from"react/compiler-runtime";import{useStream as y}from"./useStream-De5SDR6Y.mjs";import _ from"./useSubscription-CC39EoMT.mjs";const I={__lunoraRef:""},N=[],S={awaiting_approval:"awaiting-approval",awaiting_secret:"awaiting-secret"},k=o=>{const t=o.status===void 0?void 0:S[o.status];if(t!==void 0)return{seq:o.seq,type:t,...o.toolCallId===void 0?{}:{toolCallId:o.toolCallId},...o.toolName===void 0?{}:{toolName:o.toolName}}},q=o=>{if(o.role==="assistant"&&o.toolCalls)return o.toolCalls.map(r=>({input:r.input,seq:o.seq,toolCallId:r.id,toolName:r.name,type:"call"}));if(o.role!=="tool")return;const t=k(o);return t!==void 0?[t]:[{output:o.content,seq:o.seq,type:"result",...o.status==="approved"||o.status==="rejected"?{status:o.status}:{},...o.toolCallId===void 0?{}:{toolCallId:o.toolCallId},...o.toolName===void 0?{}:{toolName:o.toolName}}]},m=o=>{const t=C(12),{api:r,limit:n,stream:i,threadKey:l}=o;let a;t[0]!==n||t[1]!==l?(a=n===void 0?{key:l}:{key:l,limit:n},t[0]=n,t[1]=l,t[2]=a):a=t[2];const v=a,{data:f}=_(r.agents.agentMessages,v);let s;t[3]!==i||t[4]!==l?(s=i===void 0?"skip":{key:l},t[3]=i,t[4]=l,t[5]=s):s=t[5];const E=s,{chunks:p}=y(i??I,E),c=f??N;let e;if(t[6]!==p||t[7]!==c||t[8]!==l){e=c.flatMap(A);for(const d of p)d.kind==="progress"&&d.threadKey===l&&e.push({data:d.data,toolCallId:d.toolCallId,type:"progress"});t[6]=p,t[7]=c,t[8]=l,t[9]=e}else e=t[9];let u;return t[10]!==e?(u={events:e},t[10]=e,t[11]=u):u=t[11],u};function A(o){return q(o)??[]}export{m as useAgentToolEvents};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as h}from"react/compiler-runtime";import{getIdentityStore as k}from"@lunora/client/auth";import{useSyncExternalStore as p}from"react";import{u as A}from"./lunora-provider-CW9Gd-pp.mjs";const _=()=>{const t=h(13),e=A();let o;t[0]!==e?(o=k(e),t[0]=e,t[1]=o):o=t[1];const n=o;let s,r,u;t[2]!==e?(s=g=>e.onAuthTokenChange(g),r=()=>e.getAuthToken(),u=()=>e.getAuthToken(),t[2]=e,t[3]=s,t[4]=r,t[5]=u):(s=t[3],r=t[4],u=t[5]);const i=p(s,r,u),f=p(n.subscribe,n.getUser,T),m=p(n.subscribe,n.getStatus,b);let l;t[6]!==e?(l=g=>{e.setAuthToken(g)},t[6]=e,t[7]=l):l=t[7];const a=l;let c;return t[8]!==a||t[9]!==m||t[10]!==i||t[11]!==f?(c={setToken:a,status:m,token:i,user:f},t[8]=a,t[9]=m,t[10]=i,t[11]=f,t[12]=c):c=t[12],c};function T(){return null}function b(){return"loading"}export{_ as default};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as y}from"react/compiler-runtime";import{useMutation as z,useQuery as _,keepPreviousData as b}from"@tanstack/react-query";import{useState as U,useSyncExternalStore as D}from"react";import{u as A}from"./lunora-provider-CW9Gd-pp.mjs";const E="lunora-react-admin-auth",F=50;function S(t,e,o,u={}){const{enabled:r=!0,pageSize:c=F}=u,[i,s]=U(c),l=D(m=>{const v=t.onAuthTokenChange(m),I=t.onIdentityChange(m);return()=>{v(),I()}},()=>t.currentIdentity(),()=>t.currentIdentity()),n=[E,l??"anon",...e,i],a=_({enabled:r,placeholderData:(m,v)=>v?.queryKey[1]===n[1]?b(m):void 0,queryFn:()=>o(i),queryKey:n,staleTime:0}),d=a.data?.rows,f=a.data?.total,p=f!==void 0&&d!==void 0&&d.length<f,h=()=>{p&&s(m=>m+c)},g=()=>{a.refetch().catch(()=>{})};return{data:d,error:a.error??void 0,hasMore:p,loadMore:h,loading:a.isLoading,refetch:g,total:f}}const q=t=>{const e=y(20);let o;e[0]!==t?(o=t===void 0?{}:t,e[0]=t,e[1]=o):o=e[1];const u=o,r=A(),{enabled:c,filterField:i,filterValue:s,pageSize:l,search:n,searchField:a,sortBy:d,sortDirection:f}=u;let p;e[2]!==i||e[3]!==s||e[4]!==n||e[5]!==a||e[6]!==d||e[7]!==f?(p=["users",{filterField:i,filterValue:s,search:n,searchField:a,sortBy:d,sortDirection:f}],e[2]=i,e[3]=s,e[4]=n,e[5]=a,e[6]=d,e[7]=f,e[8]=p):p=e[8];let h;e[9]!==r||e[10]!==i||e[11]!==s||e[12]!==n||e[13]!==a||e[14]!==d||e[15]!==f?(h=m=>r.listAuthUsers({filterField:i,filterValue:s,limit:m,search:n,searchField:a,sortBy:d,sortDirection:f}),e[9]=r,e[10]=i,e[11]=s,e[12]=n,e[13]=a,e[14]=d,e[15]=f,e[16]=h):h=e[16];let g;return e[17]!==c||e[18]!==l?(g={enabled:c,pageSize:l},e[17]=c,e[18]=l,e[19]=g):g=e[19],S(r,p,h,g)},M=t=>{const e=y(8);let o;e[0]!==t?(o=t===void 0?{}:t,e[0]=t,e[1]=o):o=e[1];const u=o,r=A(),{enabled:c,pageSize:i}=u;let s;e[2]===Symbol.for("react.memo_cache_sentinel")?(s=["organizations"],e[2]=s):s=e[2];let l;e[3]!==r?(l=a=>r.listAuthOrganizations({limit:a}),e[3]=r,e[4]=l):l=e[4];let n;return e[5]!==c||e[6]!==i?(n={enabled:c,pageSize:i},e[5]=c,e[6]=i,e[7]=n):n=e[7],S(r,s,l,n)},k=t=>{const e=y(8);let o;e[0]!==t?(o=t===void 0?{}:t,e[0]=t,e[1]=o):o=e[1];const u=o,r=A(),{enabled:c,pageSize:i}=u;let s;e[2]===Symbol.for("react.memo_cache_sentinel")?(s=["sign-up-invitations"],e[2]=s):s=e[2];let l;e[3]!==r?(l=a=>r.listAuthSignUpInvitations({limit:a}),e[3]=r,e[4]=l):l=e[4];let n;return e[5]!==c||e[6]!==i?(n={enabled:c,pageSize:i},e[5]=c,e[6]=i,e[7]=n):n=e[7],S(r,s,l,n)},K=t=>{const e=y(10);let o;e[0]!==t?(o=t===void 0?{}:t,e[0]=t,e[1]=o):o=e[1];const u=o,r=A(),{enabled:c,pageSize:i,userId:s}=u;let l;e[2]!==s?(l=["sessions",{userId:s}],e[2]=s,e[3]=l):l=e[3];let n;e[4]!==r||e[5]!==s?(n=d=>r.listAuthSessions({limit:d,userId:s}),e[4]=r,e[5]=s,e[6]=n):n=e[6];let a;return e[7]!==c||e[8]!==i?(a={enabled:c,pageSize:i},e[7]=c,e[8]=i,e[9]=a):a=e[9],S(r,l,n,a)},w=()=>{const t=y(10),e=A();let o;t[0]!==e?(o={mutationFn:a=>e.impersonateAuthUser({userId:a})},t[0]=e,t[1]=o):o=t[1];const u=z(o),{mutateAsync:r,reset:c}=u;let i;t[2]!==r?(i=a=>r(a),t[2]=r,t[3]=i):i=t[3];const s=i,l=u.error??void 0;let n;return t[4]!==s||t[5]!==u.data||t[6]!==u.isPending||t[7]!==c||t[8]!==l?(n={data:u.data,error:l,impersonate:s,pending:u.isPending,reset:c},t[4]=s,t[5]=u.data,t[6]=u.isPending,t[7]=c,t[8]=l,t[9]=n):n=t[9],n};export{K as useAuthSessions,q as useAuthUsers,w as useImpersonate,M as useOrganizations,k as useSignUpInvitations};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as u}from"react/compiler-runtime";import{isAuthenticatedStatus as r,isLoadingStatus as a}from"@lunora/client/auth";import n from"./useAuth-Do03WzEi.mjs";const m=()=>{const t=u(7),{status:e}=n();let s;t[0]!==e?(s=r(e),t[0]=e,t[1]=s):s=t[1];let i;t[2]!==e?(i=a(e),t[2]=e,t[3]=i):i=t[3];let o;return t[4]!==s||t[5]!==i?(o={isAuthenticated:s,isLoading:i},t[4]=s,t[5]=i,t[6]=o):o=t[6],o};export{m as useAuthState};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{useCallback as u,useSyncExternalStore as l}from"react";import{u as c}from"./lunora-provider-CW9Gd-pp.mjs";const y=e=>{const t=c(),n=u(s=>t.subscribeClientQuery(e,()=>{s()}),[t,e.key]),r=l(n,()=>t.getClientQuery(e),()=>t.getClientQuery(e)),o=u(s=>{t.setClientQuery(e,s)},[t,e]);return[r,o]};export{y as default};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as r}from"react/compiler-runtime";import{useSyncExternalStore as u}from"react";import{u as a}from"./lunora-provider-CW9Gd-pp.mjs";const S=()=>{const t=r(4),n=a();let o,e,s;return t[0]!==n?(o=c=>n.onConnectionStatus(()=>{c()}),e=()=>n.connectionStatus(),s=()=>n.connectionStatus(),t[0]=n,t[1]=o,t[2]=e,t[3]=s):(o=t[1],e=t[2],s=t[3]),u(o,e,s)};export{S as default};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{useState as _,useRef as i,useEffect as b}from"react";import{u as d}from"./lunora-provider-CW9Gd-pp.mjs";import{stableStringify as K}from"@lunora/wire";const g="__lunora_flags__:eval",m=t=>{const e=typeof t;return e==="boolean"||e==="number"||e==="string"?e:"object"},v={__lunoraRef:g},F=(t,e,n)=>{try{return t.subscribe(v,{default:e.default,key:e.key,type:m(e.default)},s=>{n(s)},{onError:()=>{n(e.default)}})}catch{return()=>{}}},S=(t,e)=>{const n=d(),[s,r]=_(e),o=m(e),u=`${t}::${o}`,f=i(u);f.current!==u&&(f.current=u,r(e));const l=i(e);return b(()=>{l.current=e}),b(()=>{let a=!1;const c=l.current;r(c);const p=F(n,{default:c,key:t},y=>{a||r(y)});return()=>{a=!0,p()}},[n,t,o]),s},h=t=>{const e=d(),[n,s]=_(t),r=K(t),o=i(r);o.current!==r&&(o.current=r,s(t));const u=i(t);return b(()=>{u.current=t}),b(()=>{let f=!1;const l=u.current;s(l);const a=[];for(const[c,p]of Object.entries(l))a.push(F(e,{default:p,key:c},y=>{f||s(R=>({...R,[c]:y}))}));return()=>{f=!0;for(const c of a)c()}},[e,r]),n};export{S as useFlag,h as useFlags};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as S}from"react/compiler-runtime";import{useReducer as _,useRef as v,useEffect as R}from"react";import{u as b}from"./lunora-provider-CW9Gd-pp.mjs";import{s as z,c as E}from"./stream-state-abygFxmy.mjs";import{stableWireKey as H}from"@lunora/wire";const w=(t,c,n)=>{const e=S(24);let m;e[0]!==n?(m=n===void 0?{}:n,e[0]=n,e[1]=m):m=e[1];const o=m,f=b();let a;e[2]===Symbol.for("react.memo_cache_sentinel")?(a={chunks:[],error:void 0,status:"idle"},e[2]=a):a=e[2];const[s,i]=_(z,a),r=c==="skip";let u;e[3]!==c||e[4]!==r?(u=r?"skip":H(c),e[3]=c,e[4]=r,e[5]=u):u=e[5];const k=u,x=v(void 0);let l;e[6]!==c||e[7]!==f||e[8]!==o.maxBuffer||e[9]!==t||e[10]!==r?(l=()=>{if(r)return i({type:"reset"}),K;i({type:"reset"}),i({type:"start"});const{cancel:B,cleanup:y}=E(f.httpStream(t,c,{maxBuffer:o.maxBuffer}),i);return x.current=B,()=>{y(),x.current=void 0}},e[6]=c,e[7]=f,e[8]=o.maxBuffer,e[9]=t,e[10]=r,e[11]=l):l=e[11];let p;e[12]!==f||e[13]!==o.maxBuffer||e[14]!==t.method||e[15]!==t.path||e[16]!==k||e[17]!==r?(p=[f,t.method,t.path,k,r,o.maxBuffer],e[12]=f,e[13]=o.maxBuffer,e[14]=t.method,e[15]=t.path,e[16]=k,e[17]=r,e[18]=p):p=e[18],R(l,p);let h;e[19]===Symbol.for("react.memo_cache_sentinel")?(h=()=>{x.current?.()},e[19]=h):h=e[19];let d;return e[20]!==s.chunks||e[21]!==s.error||e[22]!==s.status?(d={cancel:h,chunks:s.chunks,error:s.error,status:s.status},e[20]=s.chunks,e[21]=s.error,e[22]=s.status,e[23]=d):d=e[23],d};function K(){}export{w as useHttpStream};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as M}from"react/compiler-runtime";import{useRef as R,useEffect as y}from"react";import{u as C}from"./use-paginated-core-D9QnfDFs.mjs";const v=(x,c,N)=>{const e=M(16),{initialNumItems:s}=N,{error:u,loadMore:o,pageResults:m,status:a}=C(x,c==="skip"?"skip":c,N),P=c==="skip";let t;if(e[0]!==m){t=[];for(const f of m)f&&t.push(f.page);e[0]=m,e[1]=t}else t=e[1];let i;e[2]!==s||e[3]!==o?(i={defaultNumItems:s,loadMore:o},e[2]=s,e[3]=o,e[4]=i):i=e[4];const h=R(i);let n;e[5]!==s||e[6]!==o?(n=()=>{h.current={defaultNumItems:s,loadMore:o}},e[5]=s,e[6]=o,e[7]=n):n=e[7],y(n);let r;e[8]===Symbol.for("react.memo_cache_sentinel")?(r=f=>{const{defaultNumItems:k,loadMore:L}=h.current;L(f??k)},e[8]=r):r=e[8];const I=r,d=a==="CanLoadMore",p=!P&&a==="LoadingMore",g=!P&&a==="LoadingFirstPage";let l;return e[9]!==u||e[10]!==t||e[11]!==a||e[12]!==d||e[13]!==p||e[14]!==g?(l={error:u,fetchNextPage:I,hasNextPage:d,isFetchingNextPage:p,isLoading:g,pages:t,status:a},e[9]=u,e[10]=t,e[11]=a,e[12]=d,e[13]=p,e[14]=g,e[15]=l):l=e[15],l};export{v as default};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as D}from"react/compiler-runtime";import{liveTopicSubscription as R,subscribeLiveTopic as C}from"@lunora/client";import{stableWireKey as M}from"@lunora/wire";import{useState as W,useRef as $,useEffect as y}from"react";import{u as g}from"./lunora-provider-CW9Gd-pp.mjs";function F(b,f){const t=D(8),d=f===void 0?{}:f,o=R(g(),b,d),{headers:k,maxDelayMs:T,retryDelay:K,sessionKey:L,topic:S,url:h,withCredentials:w}=o,e=M({headers:k,maxDelayMs:T,retryDelay:K,sessionKey:L,topic:S,url:h,withCredentials:w}),[p,l]=W(),m=p?.key===e?p:void 0,s=$(o);let n;t[0]!==o?(n=()=>{s.current=o},t[0]=o,t[1]=n):n=t[1],y(n);let i,c;t[2]!==e?(i=()=>{const x=C({...s.current,onError:r=>{l(E=>({error:r,key:e,lastEvent:E?.key===e?E.lastEvent:void 0})),s.current.onError?.(r)},onEvent:r=>{l({error:void 0,key:e,lastEvent:r}),s.current.onEvent?.(r)}});return()=>{x(),l(void 0)}},c=[e],t[2]=e,t[3]=i,t[4]=c):(i=t[3],c=t[4]),y(i,c);const a=m?.error,v=m?.lastEvent;let u;return t[5]!==a||t[6]!==v?(u={error:a,lastEvent:v},t[5]=a,t[6]=v,t[7]=u):u=t[7],u}export{F as useLiveTopic};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{useQueryClient as k,useMutation as v,onlineManager as g}from"@tanstack/react-query";import{useRef as A,useState as P,useCallback as O}from"react";import{u as Q}from"./lunora-provider-CW9Gd-pp.mjs";const R=async()=>new Promise(n=>{if(g.isOnline()){n();return}const r=g.subscribe(u=>{u&&(r(),n())})}),x=n=>{const r=Q(),u=k(),a=n.sensitive===!0,c=A(0),[l,p]=P(!1),b=v({mutationFn:async({args:e,options:t})=>(!(a||t?.onlineOnly===!0)&&!r.canQueueOffline(t?.shardKey)&&await R(),r.mutation(n,e,t)),networkMode:"always",...a?{gcTime:0}:{},retry:0,onMutate:()=>{c.current+=1,p(!0)},onSettled:(e,t,o)=>{if(c.current-=1,p(c.current>0),a||o.options?.onlineOnly===!0){const i=u.getMutationCache();for(const h of i.findAll({predicate:C=>C.state.variables===o}))i.remove(h)}}}),{data:m,error:d,isError:f,mutateAsync:s,reset:y}=b,w=O((e,t)=>s({args:e,options:t}),[s]),M=O(e=>({data:m,error:d,isError:f,mutate:(o,i)=>s({args:o,options:{optimisticUpdate:e,...i}}),pending:l,reset:y,withOptimisticUpdate:M}),[s,m,d,f,l,y]);return{data:m,error:d,isError:f,mutate:w,pending:l,reset:y,withOptimisticUpdate:M}};export{x as useMutation};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as p}from"react/compiler-runtime";import{createMutatorRunner as l}from"@lunora/client";import{useState as f}from"react";const E=function(s){const t=p(8),[n,m]=f(!1),[r,a]=f(void 0);let e;t[0]!==s?(e=l(s,{setError:a,setPending:m}),t[0]=s,t[1]=e):e=t[1];const{mutate:i,reset:u}=e,c=r!==void 0;let o;return t[2]!==r||t[3]!==i||t[4]!==n||t[5]!==u||t[6]!==c?(o={error:r,isError:c,mutate:i,pending:n,reset:u},t[2]=r,t[3]=i,t[4]=n,t[5]=u,t[6]=c,t[7]=o):o=t[7],o};export{E as useMutator};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c}from"react/compiler-runtime";import{u as f}from"./use-paginated-core-D9QnfDFs.mjs";const L=(d,i,l)=>{const e=c(8),{error:r,loadMore:p,pageResults:n,status:t}=f(d,i==="skip"?"skip":i,l);let s;if(e[0]!==n){s=[];for(const u of n)u&&s.push(...u.page);e[0]=n,e[1]=s}else s=e[1];const a=!(i==="skip")&&(t==="LoadingFirstPage"||t==="LoadingMore");let o;return e[2]!==r||e[3]!==p||e[4]!==s||e[5]!==t||e[6]!==a?(o={error:r,isLoading:a,loadMore:p,results:s,status:t},e[2]=r,e[3]=p,e[4]=s,e[5]=t,e[6]=a,e[7]=o):o=e[7],o};export{L as usePaginatedQuery};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{useMemo as _,useState as w,useRef as l,useEffect as u,useCallback as E}from"react";import{u as D}from"./lunora-provider-CW9Gd-pp.mjs";const V=e=>{if(!Number.isFinite(e)||e<=0)throw new RangeError(`presence intervalMs must be a positive number, got ${String(e)}`)},A=()=>{if(typeof crypto<"u"){if(typeof crypto.randomUUID=="function")return crypto.randomUUID();if(typeof crypto.getRandomValues=="function"){const e=crypto.getRandomValues(new Uint8Array(16));return Array.from(e,r=>r.toString(16).padStart(2,"0")).join("")}}throw new Error("randomSessionId: no Web Crypto available — a session id needs crypto.randomUUID or crypto.getRandomValues")},C=1e4,P=(e,r)=>{const t=D(),{heartbeat:g,intervalMs:y=C,listPresent:m,shardKey:s}=r;V(y);const o=_(()=>r.sessionId??A(),[r.sessionId]),d=JSON.stringify([m.__lunoraRef,e,s??""]),[b,p]=w(),h=b?.client===t&&b.key===d?b:void 0,R=l(r.onError);u(()=>{R.current=r.onError});const v=l(r.data),I=l(!1),S=l({client:t,heartbeat:g,roomId:e,sessionId:o,shardKey:s});u(()=>{S.current={client:t,heartbeat:g,roomId:e,sessionId:o,shardKey:s}});const i=E(()=>{const{client:n,heartbeat:c,roomId:a,sessionId:f,shardKey:k}=S.current,L={roomId:a,sessionId:f,...v.current===void 0?{}:{data:v.current}};n.mutation(c,L,{shardKey:k}).catch(()=>{})},[]),U=E(n=>{v.current=n,I.current&&i()},[i]);return u(()=>(I.current=!0,()=>{I.current=!1}),[]),u(()=>{i();const n=setInterval(i,y),c=()=>{typeof document<"u"&&document.visibilityState==="visible"&&i()};return typeof document<"u"&&document.addEventListener("visibilitychange",c),()=>{clearInterval(n),typeof document<"u"&&document.removeEventListener("visibilitychange",c)}},[i,y,t,e,o,s]),u(()=>t.acquireConnectionContext({roomId:e,sessionId:o},{shardKey:s}),[t,e,o,s]),u(()=>{let n=!1;const c=t.subscribe(m,{roomId:e},a=>{n||p({client:t,error:void 0,key:d,present:a})},{onError:a=>{n||p(f=>({client:t,error:a,key:d,present:f?.client===t&&f.key===d?f.present:void 0})),R.current?.(a)},shardKey:s});return()=>{n=!0,c(),p(void 0)}},[t,m.__lunoraRef,e,d,s]),{error:h?.error,present:h?.present,sessionId:o,setData:U}};export{P as usePresence};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as k}from"react/compiler-runtime";import{useQueryClient as q,useQuery as E}from"@tanstack/react-query";import{useState as F,useEffect as N}from"react";import{u as T,g as V}from"./lunora-provider-CW9Gd-pp.mjs";import{u as A}from"./query-core-CqnQ_-E5.mjs";import{a as C}from"./query-key-BysXrewF.mjs";import{stableWireKey as D}from"@lunora/wire";const P=(s,K,R)=>{const e=k(26),v=R===void 0?{}:R,t=T(),y=q(),{onError:Q,shardKey:r}=v,u=K==="skip",o=u?{}:K,l=D(o),a=C(s.__lunoraRef,l,r),[n,b]=F(t.isReady);let d,c;e[0]!==t||e[1]!==n?(d=()=>{n||t.whenReady().then(()=>{b(!0)})},c=[t,n],e[0]=t,e[1]=n,e[2]=d,e[3]=c):(d=e[2],c=e[3]),N(d,c);let m;if(!u){const h=t.peekHydratedQueryByKey(s.__lunoraRef,l,r);m=h===void 0?t.peekActiveQuerySnapshot(s.__lunoraRef,o,r).value:h}const g=!u&&n;let i;e[4]!==o||e[5]!==t||e[6]!==s||e[7]!==y||e[8]!==a||e[9]!==r?(i=async h=>{const{signal:S}=h;return V(t).liveValue(y,a,S,{fetch:async()=>t.query(s,o,{shardKey:r}),shardKey:r})},e[4]=o,e[5]=t,e[6]=s,e[7]=y,e[8]=a,e[9]=r,e[10]=i):i=e[10];let p;e[11]!==m||e[12]!==a||e[13]!==g||e[14]!==i?(p={enabled:g,initialData:m,queryFn:i,queryKey:a,staleTime:Number.POSITIVE_INFINITY},e[11]=m,e[12]=a,e[13]=g,e[14]=i,e[15]=p):p=e[15];const{data:I}=E(p);let f;return e[16]!==l||e[17]!==o||e[18]!==t||e[19]!==s||e[20]!==Q||e[21]!==y||e[22]!==a||e[23]!==r||e[24]!==u?(f={args:o,argsKey:l,client:t,function_:s,onError:Q,queryClient:y,queryKey:a,shardKey:r,skipped:u},e[16]=l,e[17]=o,e[18]=t,e[19]=s,e[20]=Q,e[21]=y,e[22]=a,e[23]=r,e[24]=u,e[25]=f):f=e[25],A(f),u?void 0:I};export{P as default};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{evaluate as u}from"@lunora/ratelimit";import{useRef as i,useReducer as w,useCallback as c,useEffect as R}from"react";const p=(t,a={})=>{const r=a.now??Date.now,l=a.tickMs??1e3,s=i(void 0),[,n]=w(e=>e+1,0),v=c((e=1)=>{const{status:d,value:f}=u(t,s.current,{consume:!0,count:e,now:r(),reserve:!1});return f!==void 0&&(s.current=f),n(),d},[t,r]),k=c((e=1)=>u(t,s.current,{consume:!1,count:e,now:r(),reserve:!1}).status.ok,[t,r]),m=c(()=>{s.current=void 0,n()},[]),{status:o}=u(t,s.current,{consume:!1,count:1,now:r(),reserve:!1});return R(()=>{if(o.ok)return()=>{};const e=setInterval(n,l);return()=>{clearInterval(e)}},[o.ok,l]),{check:k,consume:v,disabled:!o.ok,ok:o.ok,reset:m,retryAfter:o.retryAfter}};export{p as useRateLimit};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as K}from"react/compiler-runtime";import{useReducer as B,useRef as R,useEffect as _}from"react";import{u as v}from"./lunora-provider-CW9Gd-pp.mjs";import{s as S,c as z}from"./stream-state-abygFxmy.mjs";import{stableWireKey as E}from"@lunora/wire";const A=(u,a,l)=>{const e=K(27);let c;e[0]!==l?(c=l===void 0?{}:l,e[0]=l,e[1]=c):c=e[1];const r=c,o=v();let f;e[2]===Symbol.for("react.memo_cache_sentinel")?(f={chunks:[],error:void 0,status:"idle"},e[2]=f):f=e[2];const[t,m]=B(S,f),s=a==="skip";let n;e[3]!==a||e[4]!==s?(n=s?"skip":E(a),e[3]=a,e[4]=s,e[5]=n):n=e[5];const y=n,b=R(void 0);let i;e[6]!==a||e[7]!==o||e[8]!==u||e[9]!==r.durable||e[10]!==r.maxBuffer||e[11]!==r.shardKey||e[12]!==s?(i=()=>{if(s)return m({type:"reset"}),L;m({type:"reset"}),m({type:"start"});const{cancel:k,cleanup:x}=z(o.stream(u,a,{durable:r.durable,maxBuffer:r.maxBuffer,shardKey:r.shardKey}),m);return b.current=k,()=>{x(),b.current=void 0}},e[6]=a,e[7]=o,e[8]=u,e[9]=r.durable,e[10]=r.maxBuffer,e[11]=r.shardKey,e[12]=s,e[13]=i):i=e[13];let d;e[14]!==o||e[15]!==u.__lunoraRef||e[16]!==r.durable||e[17]!==r.maxBuffer||e[18]!==r.shardKey||e[19]!==y||e[20]!==s?(d=[o,u.__lunoraRef,y,s,r.shardKey,r.maxBuffer,r.durable],e[14]=o,e[15]=u.__lunoraRef,e[16]=r.durable,e[17]=r.maxBuffer,e[18]=r.shardKey,e[19]=y,e[20]=s,e[21]=d):d=e[21],_(i,d);let p;e[22]===Symbol.for("react.memo_cache_sentinel")?(p=()=>{b.current?.()},e[22]=p):p=e[22];let h;return e[23]!==t.chunks||e[24]!==t.error||e[25]!==t.status?(h={cancel:p,chunks:t.chunks,error:t.error,status:t.status},e[23]=t.chunks,e[24]=t.error,e[25]=t.status,e[26]=h):h=e[26],h};function L(){}export{A as useStream};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as O}from"react/compiler-runtime";import{createQuerySubscription as j}from"@lunora/client/query";import{LunoraError as L}from"@lunora/errors";import{useState as M,useRef as R,useEffect as E}from"react";import{u as q}from"./lunora-provider-CW9Gd-pp.mjs";import{stableWireKey as x}from"@lunora/wire";const A=Object.freeze({data:void 0,error:void 0}),W=(t,n,b)=>{const e=O(20),r=b===void 0?{}:b,o=q(),a=n==="skip",c=a?"skip":x(n),i=JSON.stringify([t.__lunoraRef,c,r.shardKey??""]),[y,p]=M(void 0),v=R(r.onError);let u;e[0]!==r.onError?(u=()=>{v.current=r.onError},e[0]=r.onError,e[1]=u):u=e[1],E(u);let d;e[2]!==n||e[3]!==t?(d={args:n,fn:t},e[2]=n,e[3]=t,e[4]=d):d=e[4];const K=R(d);let l;e[5]!==n||e[6]!==t?(l=()=>{K.current={args:n,fn:t}},e[5]=n,e[6]=t,e[7]=l):l=e[7],E(l);let f;e[8]!==o||e[9]!==i||e[10]!==r.shardKey||e[11]!==a?(f=()=>{if(a)return D;let h=!1;const{args:k,fn:w}=K.current,S=j(o,w,k,{onData:s=>{h||p({client:o,key:i,result:{data:s,error:void 0}})},onError:s=>{const z=Object.assign(s.code===void 0?new Error(s.message):new L(s.code,s.message),s.why===void 0?{}:{why:s.why});v.current?.(s),queueMicrotask(()=>{h||p({client:o,key:i,result:{data:void 0,error:z}})})}},{shardKey:r.shardKey});return()=>{h=!0,S(),p(void 0)}},e[8]=o,e[9]=i,e[10]=r.shardKey,e[11]=a,e[12]=f):f=e[12];let m;return e[13]!==o||e[14]!==t.__lunoraRef||e[15]!==i||e[16]!==r.shardKey||e[17]!==c||e[18]!==a?(m=[o,t.__lunoraRef,i,c,r.shardKey,a],e[13]=o,e[14]=t.__lunoraRef,e[15]=i,e[16]=r.shardKey,e[17]=c,e[18]=a,e[19]=m):m=e[19],E(f,m),y?.client===o&&y.key===i?y.result:A};function D(){}export{W as default};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as h}from"react/compiler-runtime";import{useQueryClient as R,useSuspenseQuery as S}from"@tanstack/react-query";import{u as I,g as b}from"./lunora-provider-CW9Gd-pp.mjs";import{u as q}from"./query-core-CqnQ_-E5.mjs";import{a as F}from"./query-key-BysXrewF.mjs";import{stableWireKey as k}from"@lunora/wire";const E=(s,m,c)=>{const e=h(21),f=c===void 0?{}:c,r=I(),u=R(),{onError:d,shardKey:a}=f,y=m,o=k(y),t=F(s.__lunoraRef,o,a),p=r.isReady?r.peekHydratedQueryByKey(s.__lunoraRef,o,a):void 0;let i;e[0]!==o||e[1]!==y||e[2]!==r||e[3]!==s||e[4]!==u||e[5]!==t||e[6]!==a?(i=async K=>{const{signal:Q}=K;return await r.whenReady(),r.peekHydratedQueryByKey(s.__lunoraRef,o,a)??b(r).liveValue(u,t,Q,{fetch:async()=>r.query(s,y,{shardKey:a}),waitForPush:!1})},e[0]=o,e[1]=y,e[2]=r,e[3]=s,e[4]=u,e[5]=t,e[6]=a,e[7]=i):i=e[7];let l;e[8]!==p||e[9]!==t||e[10]!==i?(l={initialData:p,queryFn:i,queryKey:t,staleTime:Number.POSITIVE_INFINITY},e[8]=p,e[9]=t,e[10]=i,e[11]=l):l=e[11];const{data:g}=S(l);let n;return e[12]!==o||e[13]!==y||e[14]!==r||e[15]!==s||e[16]!==d||e[17]!==u||e[18]!==t||e[19]!==a?(n={args:y,argsKey:o,client:r,function_:s,onError:d,queryClient:u,queryKey:t,shardKey:a,skipped:!1},e[12]=o,e[13]=y,e[14]=r,e[15]=s,e[16]=d,e[17]=u,e[18]=t,e[19]=a,e[20]=n):n=e[20],q(n),g};export{E as default};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{useState as T,useRef as W,useCallback as y,useEffect as G}from"react";import{u as X}from"./lunora-provider-CW9Gd-pp.mjs";const N="/_lunora/ws",j="/_lunora/voice/",z=4001,O=e=>e.startsWith("https://")?`wss://${e.slice(8)}`:e.startsWith("http://")?`ws://${e.slice(7)}`:e,Q=e=>{const r=e.startsWith("agents:")?e.slice(7):e;return r.endsWith("Voice")?r.slice(0,-5):r},Y=(e,r)=>{if(r===void 0||r==="")return O(e);if(r.endsWith(N))return r.slice(0,-N.length);try{return new URL(r).origin}catch{return O(e)}},Z=e=>{const r=Y(e.httpUrl,e.wsUrl),s=r.endsWith("/")?r.slice(0,-1):r,c=new URLSearchParams({threadKey:e.threadKey});return`${s}${j}${encodeURIComponent(e.agent)}?${c.toString()}`},ee=(e,r)=>{if(r?.code===z)return new Error(`${e}: authentication token expired — refresh the credential and start a new call`)},te=(e,r,s)=>{const c=e.currentIdentity();return e.onAuthTokenChange(()=>{e.currentIdentity()!==c&&s(new Error(`${r}: the signed-in identity changed during the call — the session was ended; start a new call`))})},ne=16e3,re=e=>{if(e.length===0)return 0;let r=0;for(const s of e)r+=s*s;return Math.sqrt(r/e.length)},se=(e,r)=>{const s=r/ne,c=s>1?Math.floor(e.length/s):e.length,d=new ArrayBuffer(c*2),l=new DataView(d);for(let u=0;u<c;u+=1){const g=e[Math.floor(u*s)]??0,p=Math.max(-1,Math.min(1,g));l.setInt16(u*2,p<0?p*32768:p*32767,!0)}return new Uint8Array(d)},oe=async e=>{const r=globalThis,s=r.navigator?.mediaDevices?.getUserMedia.bind(r.navigator.mediaDevices),c=r.AudioContext??r.webkitAudioContext;if(!s||!c)throw new Error("useVoiceAgent: microphone capture requires getUserMedia + AudioContext (no browser audio available)");const d=await s({audio:{channelCount:1,echoCancellation:!0,noiseSuppression:!0}}),l=new c,u=l.createMediaStreamSource(d),g=l.createScriptProcessor(4096,1,1);let p=!1,w=!1,a=0,h=0;return g.onaudioprocess=o=>{const f=o.inputBuffer.getChannelData(0),m=p?0:re(f);if(e.onLevel(m),p)return;if(e.onAudio(se(f,l.sampleRate)),e.isTurnActive()){h=m>=e.interruptThreshold?h+1:0,h>=e.interruptChunks&&(h=0,e.onInterrupt());return}h=0;const x=f.length/l.sampleRate*1e3;if(m>=e.silenceThreshold){w=!0,a=0;return}w&&(a+=x,a>=e.silenceDurationMs&&(w=!1,a=0,e.onSilence()))},u.connect(g),g.connect(l.destination),{setMuted:o=>{p=o},stop:()=>{g.disconnect(),u.disconnect();for(const o of d.getTracks())o.stop();l.close()}}},ie=()=>{const e=globalThis,r=e.AudioContext??e.webkitAudioContext;if(!r)throw new Error("useVoiceAgent: audio playback requires AudioContext (no browser audio available)");const s=new r,c=new Set;let d=0,l=Promise.resolve(),u=0;const g=async(a,h)=>{if(h!==u)return;let o;try{o=await s.decodeAudioData(a.buffer)}catch{return}if(h!==u)return;const f=s.createBufferSource();f.buffer=o,f.connect(s.destination);const m=Math.max(s.currentTime,d);f.start(m),d=m+o.duration,c.add(f),f.onended=()=>{c.delete(f)}},p=a=>{const h=Uint8Array.from(a),o=u;l=l.then(()=>g(h,o))},w=()=>{u+=1;for(const a of c)try{a.stop()}catch{}c.clear(),d=s.currentTime};return{enqueue:p,interrupt:w,stop:()=>{w(),s.close()}}},P=1,ce=.01,ae=1200,ue=.15,le=3,he=e=>{const{createMicrophone:r=oe,createSpeaker:s=ie,createSocket:c,interruptChunks:d=le,interruptThreshold:l=ue,silenceDurationMs:u=ae,silenceThreshold:g=ce,threadKey:p,voice:w}=e,a=X(),[h,o]=T("idle"),[f,m]=T(!1),[x,M]=T(""),[H,v]=T(""),[$,R]=T(0),[I,U]=T(!1),[B,E]=T(void 0),i=W(void 0),_=W(!1),C=y(n=>{const t=i.current?.socket;return t?.readyState===P?(t.send(JSON.stringify(n)),!0):!1},[]),A=y(()=>{const n=i.current;if(i.current=void 0,n){n.unwatchIdentity?.(),n.microphone?.stop(),n.speaker?.stop(),n.socket.onmessage=null,n.socket.onerror=null,n.socket.onclose=null;try{n.socket.close()}catch{}}_.current=!1,m(!1),o("idle"),R(0)},[]),L=y(n=>{const t=i.current;switch(n.type){case"assistant_delta":{t&&(t.speaking=!0),o("speaking"),v(F=>F+n.text);break}case"assistant_discarded":{t&&(t.suppressAudio=!0),t?.speaker?.interrupt(),v("");break}case"assistant_done":{t&&(t.awaitingTurn=!1,t.speaking=!1),v(n.text),o("listening");break}case"error":{t&&(t.awaitingTurn=!1,t.speaking=!1),E(new Error(n.message)),o("listening");break}case"interrupted":{t&&(t.awaitingTurn=!1,t.speaking=!1,t.suppressAudio=!1),t?.speaker?.interrupt(),o("listening");break}case"ready":{t&&(t.audioFormat=n.audioFormat,t.suppressAudio=!1),m(!0),o("listening");break}case"user_transcript":{t&&(t.suppressAudio=!1),M(n.text),v(""),o("thinking");break}}},[]),D=y(n=>{const t=i.current;!t||t.suppressAudio||(t.speaker??=s({audioFormat:t.audioFormat}),t.speaking=!0,o("speaking"),t.speaker.enqueue(n))},[s]),q=y(async()=>{if(i.current||_.current)return;_.current=!0,E(void 0),M(""),v("");let n;try{const t=Z({agent:Q(w.__lunoraRef),httpUrl:a.url,threadKey:p,wsUrl:a.wsUrl}),S=(c??(k=>{const b=a.getWebSocketImpl();if(!b)throw new Error("useVoiceAgent: no WebSocket implementation available (pass createSocket explicitly)");return new b(k)}))(t);S.binaryType="arraybuffer",n={audioFormat:"mp3",microphone:void 0,socket:S,speaker:void 0,speaking:!1,awaitingTurn:!1,suppressAudio:!1,unwatchIdentity:void 0},i.current=n,n.unwatchIdentity=te(a,"useVoiceAgent",k=>{i.current===n&&(E(k),A())}),S.onmessage=k=>{if(typeof k.data=="string"){try{L(JSON.parse(k.data))}catch{}return}D(new Uint8Array(k.data))},S.onerror=()=>{E(new Error("useVoiceAgent: voice socket error"))},S.onclose=k=>{if(i.current!==n)return;const b=ee("useVoiceAgent",k);b&&E(b),A()};const V=await r({interruptChunks:d,interruptThreshold:l,isTurnActive:()=>(i.current?.speaking??!1)||(i.current?.awaitingTurn??!1),onAudio:k=>{S.readyState===P&&S.send(k)},onInterrupt:()=>{C({type:"interrupt"}),i.current?.speaker?.interrupt(),i.current&&(i.current.awaitingTurn=!1,i.current.speaking=!1,i.current.suppressAudio=!0),o("listening")},onLevel:R,onSilence:()=>{C({type:"commit"}),i.current&&(i.current.awaitingTurn=!0),o("thinking")},silenceDurationMs:u,silenceThreshold:g});i.current===n?(n.microphone=V,U(!1),n.speaking||o("listening")):V.stop()}catch(t){i.current===n&&(E(t instanceof Error?t:new Error(String(t))),A())}finally{_.current=!1}},[a,r,c,D,L,d,l,C,u,g,A,p,w]),K=y(()=>{const n=!I;return i.current?.microphone?.setMuted(n),U(n),n},[I]),J=y(n=>{C({text:n,type:"text"})&&(i.current&&(i.current.awaitingTurn=!0),o("thinking"))},[C]);return G(()=>A,[A]),{audioLevel:$,connected:f,endCall:A,error:B,interimTranscript:H,isMuted:I,sendText:J,startCall:q,status:h,toggleMute:K,transcript:x}};export{he as useVoiceAgent};
@@ -0,0 +1,107 @@
1
+ import { ReactNode } from 'react';
2
+ /**
3
+ * Stable provider identifier. Mirror of `@lunora/payment`'s `ProviderId` — the
4
+ * value is persisted verbatim, so an app branching on it must see every provider
5
+ * that has an adapter, not just the two that shipped first.
6
+ */
7
+ type ProviderId = "autumn" | "creem" | "dodopayments" | "polar" | "stripe";
8
+ /**
9
+ * Client-safe mirror of `@lunora/payment`'s `Subscription`. Re-declared here
10
+ * (rather than imported) so this React entry never pulls in the server-only
11
+ * `@lunora/payment` module graph — the kit stays React + DOM only.
12
+ * `__tests__/payment-mirror.test.ts` fails when this drifts from
13
+ * `packages/payment/src/types.ts`.
14
+ */
15
+ interface Subscription {
16
+ readonly cancelAtPeriodEnd: boolean;
17
+ readonly createdAt: number;
18
+ readonly currentPeriodEnd?: number;
19
+ /** Start of the current billing period — the window metered usage is summed over. */
20
+ readonly currentPeriodStart?: number;
21
+ readonly id: string;
22
+ /** When the provider says the last applied event happened (epoch ms); older redeliveries are ignored. */
23
+ readonly lastEventAt?: number;
24
+ readonly priceId: string;
25
+ /**
26
+ * EVERY price/product id the subscription bills, not just the primary one. A Stripe
27
+ * subscription can carry an add-on or a metered price alongside the base plan, and a
28
+ * customer paying for one is entitled to it — so entitlements test membership here.
29
+ *
30
+ * Optional because the webhook path and any pre-existing stored row carry only
31
+ * `priceId`; absent reads as `[priceId]`, which is exactly right for the single-item
32
+ * case every other provider has.
33
+ */
34
+ readonly priceIds?: ReadonlyArray<string>;
35
+ readonly provider: ProviderId;
36
+ readonly quantity: number;
37
+ readonly referenceId: string;
38
+ /** Store-maintained write counter. The kit does not read it; it is mirrored so the drift gate sees every field. */
39
+ readonly revision?: number;
40
+ readonly state: "active" | "canceled" | "past_due" | "paused" | "trialing";
41
+ readonly updatedAt: number;
42
+ }
43
+ /** The `{ url }` shape every checkout/portal trigger resolves to. */
44
+ interface RedirectTarget {
45
+ readonly url: string;
46
+ }
47
+ /** A thunk the app supplies that calls its own Lunora action and resolves a redirect URL. */
48
+ type RedirectTrigger = () => Promise<RedirectTarget>;
49
+ interface UseCheckoutResult {
50
+ /** Run the trigger and redirect the browser to the resolved URL. Resolves once the redirect is issued; rejects on failure. */
51
+ checkout: () => Promise<void>;
52
+ /** The most recent failure, or `undefined`. */
53
+ error: Error | undefined;
54
+ /** `true` while the trigger is in flight (before the redirect is issued). */
55
+ pending: boolean;
56
+ }
57
+ /**
58
+ * Decoupled redirect-on-resolve primitive shared by `CheckoutButton` and
59
+ * `CustomerPortalButton`. The app passes a `trigger` thunk that calls its own
60
+ * Lunora action (the one wrapping `LunoraPayment.createCheckout` /
61
+ * `createPortalSession`) and resolves `{ url }`; this hook awaits it, flips
62
+ * `pending`, surfaces any `error`, and on success navigates via
63
+ * `location.assign(url)`.
64
+ *
65
+ * Mirrors Convex's `CheckoutLink` / `CustomerPortalLink` flow (trigger an action
66
+ * that returns a URL, then redirect) while staying agnostic of the app's
67
+ * function names.
68
+ */
69
+ declare const useCheckout: (trigger: RedirectTrigger) => UseCheckoutResult;
70
+ /**
71
+ * Presentational props shared by the redirect buttons. Kept to a curated set
72
+ * (rather than spreading arbitrary button attributes) so the component stays
73
+ * within the repo's `react/jsx-props-no-spreading` rule while covering the
74
+ * common styling / accessibility hooks.
75
+ */
76
+ interface RedirectButtonOwnProps {
77
+ /** Accessible label when the visible `children` are icon-only. */
78
+ "aria-label"?: string;
79
+ children?: ReactNode;
80
+ className?: string;
81
+ /** Force-disable the control regardless of pending state. */
82
+ disabled?: boolean;
83
+ /** Called with the failure when the trigger rejects. The error is also surfaced via `useCheckout`. */
84
+ onError?: (error: Error) => void;
85
+ title?: string;
86
+ }
87
+ interface CheckoutButtonProps extends RedirectButtonOwnProps {
88
+ /** Calls the app's checkout action and resolves the hosted-checkout `{ url }`. */
89
+ onCheckout: RedirectTrigger;
90
+ }
91
+ interface CustomerPortalButtonProps extends RedirectButtonOwnProps {
92
+ /** Calls the app's portal action and resolves the customer-portal `{ url }`. */
93
+ onPortal: RedirectTrigger;
94
+ }
95
+ /**
96
+ * Button that starts a hosted checkout. On click it awaits `onCheckout` (a thunk
97
+ * that calls the app's checkout action) and redirects to the returned URL,
98
+ * disabling itself while the request is in flight.
99
+ */
100
+ declare const CheckoutButton: ({ onCheckout, ...rest }: CheckoutButtonProps) => ReactNode;
101
+ /**
102
+ * Button that opens the provider's customer portal. On click it awaits
103
+ * `onPortal` (a thunk that calls the app's portal action) and redirects to the
104
+ * returned URL, disabling itself while the request is in flight.
105
+ */
106
+ declare const CustomerPortalButton: ({ onPortal, ...rest }: CustomerPortalButtonProps) => ReactNode;
107
+ export { CheckoutButton, type CheckoutButtonProps, CustomerPortalButton, type CustomerPortalButtonProps, type ProviderId, type RedirectTarget, type RedirectTrigger, type Subscription, type UseCheckoutResult, useCheckout };
@@ -0,0 +1,107 @@
1
+ import { ReactNode } from 'react';
2
+ /**
3
+ * Stable provider identifier. Mirror of `@lunora/payment`'s `ProviderId` — the
4
+ * value is persisted verbatim, so an app branching on it must see every provider
5
+ * that has an adapter, not just the two that shipped first.
6
+ */
7
+ type ProviderId = "autumn" | "creem" | "dodopayments" | "polar" | "stripe";
8
+ /**
9
+ * Client-safe mirror of `@lunora/payment`'s `Subscription`. Re-declared here
10
+ * (rather than imported) so this React entry never pulls in the server-only
11
+ * `@lunora/payment` module graph — the kit stays React + DOM only.
12
+ * `__tests__/payment-mirror.test.ts` fails when this drifts from
13
+ * `packages/payment/src/types.ts`.
14
+ */
15
+ interface Subscription {
16
+ readonly cancelAtPeriodEnd: boolean;
17
+ readonly createdAt: number;
18
+ readonly currentPeriodEnd?: number;
19
+ /** Start of the current billing period — the window metered usage is summed over. */
20
+ readonly currentPeriodStart?: number;
21
+ readonly id: string;
22
+ /** When the provider says the last applied event happened (epoch ms); older redeliveries are ignored. */
23
+ readonly lastEventAt?: number;
24
+ readonly priceId: string;
25
+ /**
26
+ * EVERY price/product id the subscription bills, not just the primary one. A Stripe
27
+ * subscription can carry an add-on or a metered price alongside the base plan, and a
28
+ * customer paying for one is entitled to it — so entitlements test membership here.
29
+ *
30
+ * Optional because the webhook path and any pre-existing stored row carry only
31
+ * `priceId`; absent reads as `[priceId]`, which is exactly right for the single-item
32
+ * case every other provider has.
33
+ */
34
+ readonly priceIds?: ReadonlyArray<string>;
35
+ readonly provider: ProviderId;
36
+ readonly quantity: number;
37
+ readonly referenceId: string;
38
+ /** Store-maintained write counter. The kit does not read it; it is mirrored so the drift gate sees every field. */
39
+ readonly revision?: number;
40
+ readonly state: "active" | "canceled" | "past_due" | "paused" | "trialing";
41
+ readonly updatedAt: number;
42
+ }
43
+ /** The `{ url }` shape every checkout/portal trigger resolves to. */
44
+ interface RedirectTarget {
45
+ readonly url: string;
46
+ }
47
+ /** A thunk the app supplies that calls its own Lunora action and resolves a redirect URL. */
48
+ type RedirectTrigger = () => Promise<RedirectTarget>;
49
+ interface UseCheckoutResult {
50
+ /** Run the trigger and redirect the browser to the resolved URL. Resolves once the redirect is issued; rejects on failure. */
51
+ checkout: () => Promise<void>;
52
+ /** The most recent failure, or `undefined`. */
53
+ error: Error | undefined;
54
+ /** `true` while the trigger is in flight (before the redirect is issued). */
55
+ pending: boolean;
56
+ }
57
+ /**
58
+ * Decoupled redirect-on-resolve primitive shared by `CheckoutButton` and
59
+ * `CustomerPortalButton`. The app passes a `trigger` thunk that calls its own
60
+ * Lunora action (the one wrapping `LunoraPayment.createCheckout` /
61
+ * `createPortalSession`) and resolves `{ url }`; this hook awaits it, flips
62
+ * `pending`, surfaces any `error`, and on success navigates via
63
+ * `location.assign(url)`.
64
+ *
65
+ * Mirrors Convex's `CheckoutLink` / `CustomerPortalLink` flow (trigger an action
66
+ * that returns a URL, then redirect) while staying agnostic of the app's
67
+ * function names.
68
+ */
69
+ declare const useCheckout: (trigger: RedirectTrigger) => UseCheckoutResult;
70
+ /**
71
+ * Presentational props shared by the redirect buttons. Kept to a curated set
72
+ * (rather than spreading arbitrary button attributes) so the component stays
73
+ * within the repo's `react/jsx-props-no-spreading` rule while covering the
74
+ * common styling / accessibility hooks.
75
+ */
76
+ interface RedirectButtonOwnProps {
77
+ /** Accessible label when the visible `children` are icon-only. */
78
+ "aria-label"?: string;
79
+ children?: ReactNode;
80
+ className?: string;
81
+ /** Force-disable the control regardless of pending state. */
82
+ disabled?: boolean;
83
+ /** Called with the failure when the trigger rejects. The error is also surfaced via `useCheckout`. */
84
+ onError?: (error: Error) => void;
85
+ title?: string;
86
+ }
87
+ interface CheckoutButtonProps extends RedirectButtonOwnProps {
88
+ /** Calls the app's checkout action and resolves the hosted-checkout `{ url }`. */
89
+ onCheckout: RedirectTrigger;
90
+ }
91
+ interface CustomerPortalButtonProps extends RedirectButtonOwnProps {
92
+ /** Calls the app's portal action and resolves the customer-portal `{ url }`. */
93
+ onPortal: RedirectTrigger;
94
+ }
95
+ /**
96
+ * Button that starts a hosted checkout. On click it awaits `onCheckout` (a thunk
97
+ * that calls the app's checkout action) and redirects to the returned URL,
98
+ * disabling itself while the request is in flight.
99
+ */
100
+ declare const CheckoutButton: ({ onCheckout, ...rest }: CheckoutButtonProps) => ReactNode;
101
+ /**
102
+ * Button that opens the provider's customer portal. On click it awaits
103
+ * `onPortal` (a thunk that calls the app's portal action) and redirects to the
104
+ * returned URL, disabling itself while the request is in flight.
105
+ */
106
+ declare const CustomerPortalButton: ({ onPortal, ...rest }: CustomerPortalButtonProps) => ReactNode;
107
+ export { CheckoutButton, type CheckoutButtonProps, CustomerPortalButton, type CustomerPortalButtonProps, type ProviderId, type RedirectTarget, type RedirectTrigger, type Subscription, type UseCheckoutResult, useCheckout };
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{c as p}from"react/compiler-runtime";import{useState as k,useCallback as C}from"react";import{jsx as m}from"react/jsx-runtime";const y=n=>{const t=new URL(n,globalThis.location.href);if(t.protocol!=="https:"&&t.protocol!=="http:")throw new Error(`refusing to redirect to a non-http(s) URL: ${t.protocol}`);return t.href},L=n=>{const[t,e]=k(!1),[o,a]=k(void 0);return{checkout:C(async()=>{e(!0),a(void 0);try{const r=await n();globalThis.location.assign(y(r.url))}catch(r){const l=r instanceof Error?r:new Error(String(r));throw a(l),l}finally{e(!1)}},[n]),error:o,pending:t}},E=n=>{const t=p(11),{"aria-label":e,children:o,className:a,disabled:c,onError:r,title:l,trigger:u}=n,{checkout:i,pending:s}=L(u);let d;t[0]!==i||t[1]!==r?(d=()=>{i().catch(g=>{const w=g instanceof Error?g:new Error(String(g));r?.(w)})},t[0]=i,t[1]=r,t[2]=d):d=t[2];const f=d,b=c===!0||s;let h;return t[3]!==e||t[4]!==o||t[5]!==a||t[6]!==f||t[7]!==s||t[8]!==b||t[9]!==l?(h=m("button",{"aria-busy":s,"aria-label":e,className:a,disabled:b,onClick:f,title:l,type:"button",children:o}),t[3]=e,t[4]=o,t[5]=a,t[6]=f,t[7]=s,t[8]=b,t[9]=l,t[10]=h):h=t[10],h},N=n=>{const t=p(11);let e,o;t[0]!==n?({onCheckout:e,...o}=n,t[0]=n,t[1]=e,t[2]=o):(e=t[1],o=t[2]);const{"aria-label":a,children:c,className:r,disabled:l,onError:u,title:i}=o;let s;return t[3]!==a||t[4]!==c||t[5]!==r||t[6]!==l||t[7]!==e||t[8]!==u||t[9]!==i?(s=m(E,{"aria-label":a,className:r,disabled:l,onError:u,title:i,trigger:e,children:c}),t[3]=a,t[4]=c,t[5]=r,t[6]=l,t[7]=e,t[8]=u,t[9]=i,t[10]=s):s=t[10],s},P=n=>{const t=p(11);let e,o;t[0]!==n?({onPortal:e,...o}=n,t[0]=n,t[1]=e,t[2]=o):(e=t[1],o=t[2]);const{"aria-label":a,children:c,className:r,disabled:l,onError:u,title:i}=o;let s;return t[3]!==a||t[4]!==c||t[5]!==r||t[6]!==l||t[7]!==u||t[8]!==e||t[9]!==i?(s=m(E,{"aria-label":a,className:r,disabled:l,onError:u,title:i,trigger:e,children:c}),t[3]=a,t[4]=c,t[5]=r,t[6]=l,t[7]=u,t[8]=e,t[9]=i,t[10]=s):s=t[10],s};export{N as CheckoutButton,P as CustomerPortalButton,L as useCheckout};