@urun-sh/react 0.1.15 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.16
4
+
5
+ - Make the WorkOS Next.js AuthKit import statically discoverable so Next.js bundles the token bridge in production apps.
6
+
3
7
  ## 0.1.15
4
8
 
5
9
  - Read WorkOS access tokens from the Next.js AuthKit provider before falling back to authkit-react.
@@ -0,0 +1 @@
1
+ import{createContext as o,useContext as u,useMemo as c}from"react";import{jsx as i}from"react/jsx-runtime";var r=o(null);function s({getAccessToken:e,children:n}){let t=c(()=>({getAccessToken:e}),[e]);return i(r.Provider,{value:t,children:n})}var U=s;function d(){return u(r)}export{s as a,U as b,d as c};
package/dist/index.d.mts CHANGED
@@ -42,6 +42,19 @@ declare class UrunErrorBoundary extends Component<UrunErrorBoundaryProps, UrunEr
42
42
  render(): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
43
43
  }
44
44
 
45
+ type UrunAccessToken = string | null | undefined;
46
+ type UrunAccessTokenProvider = () => UrunAccessToken | Promise<UrunAccessToken>;
47
+ interface UrunAuthContextValue {
48
+ getAccessToken: UrunAccessTokenProvider;
49
+ }
50
+ interface UrunAuthProviderProps {
51
+ getAccessToken: UrunAccessTokenProvider;
52
+ children: ReactNode;
53
+ }
54
+ declare function UrunAuthProvider({ getAccessToken, children }: UrunAuthProviderProps): react_jsx_runtime.JSX.Element;
55
+ declare const UrunJwtProvider: typeof UrunAuthProvider;
56
+ declare function useUrunAuth(): UrunAuthContextValue | null;
57
+
45
58
  type UrunAuthMode = 'workos' | 'jwt';
46
59
  declare function urunPublicEnv(name: string): string | undefined;
47
60
  declare function authMode(): UrunAuthMode;
@@ -199,4 +212,4 @@ declare function useMetricsPanel(props: MetricsPanelProps): {
199
212
  };
200
213
  declare function MetricsPanel(props: MetricsPanelProps): react_jsx_runtime.JSX.Element;
201
214
 
202
- export { ComponentRenderer, ImageFrame, ImageFrameSchema, MetricsPanel, MetricsPanelSchema, ProgressCard, ProgressCardSchema, type ReactApp, type ReactSession, type ReactSessionDocument, type ReactSessionStream, type RegisteredComponent, StatusBadge, StatusBadgeSchema, TextStream, TextStreamSchema, type UrunAuthMode, UrunErrorBoundary, UrunProvider, authMode, registerComponent, urunPublicEnv, useApp, useImageFrame, useMetricsPanel, useProgressCard, useStatusBadge, useTextStream, usesWorkOSAuth };
215
+ export { ComponentRenderer, ImageFrame, ImageFrameSchema, MetricsPanel, MetricsPanelSchema, ProgressCard, ProgressCardSchema, type ReactApp, type ReactSession, type ReactSessionDocument, type ReactSessionStream, type RegisteredComponent, StatusBadge, StatusBadgeSchema, TextStream, TextStreamSchema, type UrunAccessToken, type UrunAccessTokenProvider, type UrunAuthContextValue, type UrunAuthMode, UrunAuthProvider, type UrunAuthProviderProps, UrunErrorBoundary, UrunJwtProvider, UrunProvider, authMode, registerComponent, urunPublicEnv, useApp, useImageFrame, useMetricsPanel, useProgressCard, useStatusBadge, useTextStream, useUrunAuth, usesWorkOSAuth };
package/dist/index.d.ts CHANGED
@@ -42,6 +42,19 @@ declare class UrunErrorBoundary extends Component<UrunErrorBoundaryProps, UrunEr
42
42
  render(): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
43
43
  }
44
44
 
45
+ type UrunAccessToken = string | null | undefined;
46
+ type UrunAccessTokenProvider = () => UrunAccessToken | Promise<UrunAccessToken>;
47
+ interface UrunAuthContextValue {
48
+ getAccessToken: UrunAccessTokenProvider;
49
+ }
50
+ interface UrunAuthProviderProps {
51
+ getAccessToken: UrunAccessTokenProvider;
52
+ children: ReactNode;
53
+ }
54
+ declare function UrunAuthProvider({ getAccessToken, children }: UrunAuthProviderProps): react_jsx_runtime.JSX.Element;
55
+ declare const UrunJwtProvider: typeof UrunAuthProvider;
56
+ declare function useUrunAuth(): UrunAuthContextValue | null;
57
+
45
58
  type UrunAuthMode = 'workos' | 'jwt';
46
59
  declare function urunPublicEnv(name: string): string | undefined;
47
60
  declare function authMode(): UrunAuthMode;
@@ -199,4 +212,4 @@ declare function useMetricsPanel(props: MetricsPanelProps): {
199
212
  };
200
213
  declare function MetricsPanel(props: MetricsPanelProps): react_jsx_runtime.JSX.Element;
201
214
 
202
- export { ComponentRenderer, ImageFrame, ImageFrameSchema, MetricsPanel, MetricsPanelSchema, ProgressCard, ProgressCardSchema, type ReactApp, type ReactSession, type ReactSessionDocument, type ReactSessionStream, type RegisteredComponent, StatusBadge, StatusBadgeSchema, TextStream, TextStreamSchema, type UrunAuthMode, UrunErrorBoundary, UrunProvider, authMode, registerComponent, urunPublicEnv, useApp, useImageFrame, useMetricsPanel, useProgressCard, useStatusBadge, useTextStream, usesWorkOSAuth };
215
+ export { ComponentRenderer, ImageFrame, ImageFrameSchema, MetricsPanel, MetricsPanelSchema, ProgressCard, ProgressCardSchema, type ReactApp, type ReactSession, type ReactSessionDocument, type ReactSessionStream, type RegisteredComponent, StatusBadge, StatusBadgeSchema, TextStream, TextStreamSchema, type UrunAccessToken, type UrunAccessTokenProvider, type UrunAuthContextValue, type UrunAuthMode, UrunAuthProvider, type UrunAuthProviderProps, UrunErrorBoundary, UrunJwtProvider, UrunProvider, authMode, registerComponent, urunPublicEnv, useApp, useImageFrame, useMetricsPanel, useProgressCard, useStatusBadge, useTextStream, useUrunAuth, usesWorkOSAuth };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var he=Object.create;var b=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var ve=Object.getOwnPropertyNames;var ye=Object.getPrototypeOf,ke=Object.prototype.hasOwnProperty;var _e=(t,e)=>{for(var r in e)b(t,r,{get:e[r],enumerable:!0})},$=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ve(e))!ke.call(t,o)&&o!==r&&b(t,o,{get:()=>e[o],enumerable:!(n=Se(e,o))||n.enumerable});return t};var Pe=(t,e,r)=>(r=t!=null?he(ye(t)):{},$(e||!t||!t.__esModule?b(r,"default",{value:t,enumerable:!0}):r,t)),Te=t=>$(b({},"__esModule",{value:!0}),t);var be={};_e(be,{ComponentRenderer:()=>ne,ImageFrame:()=>de,ImageFrameSchema:()=>pe,MetricsPanel:()=>le,MetricsPanelSchema:()=>me,ProgressCard:()=>se,ProgressCardSchema:()=>oe,StatusBadge:()=>ae,StatusBadgeSchema:()=>ie,TextStream:()=>ue,TextStreamSchema:()=>ce,UrunErrorBoundary:()=>l,UrunProvider:()=>G,authMode:()=>y,registerComponent:()=>re,urunPublicEnv:()=>i,useApp:()=>Y,useImageFrame:()=>X,useMetricsPanel:()=>V,useProgressCard:()=>L,useStatusBadge:()=>D,useTextStream:()=>W,usesWorkOSAuth:()=>q});module.exports=Te(be);var N=require("react");var H=require("react"),S=require("react/jsx-runtime"),l=class extends H.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,r){console.error("[urun] Error caught by UrunErrorBoundary:",e,r)}render(){if(this.state.error){let{fallback:e}=this.props;return typeof e=="function"?e(this.state.error):e||(0,S.jsxs)("div",{role:"status","aria-live":"polite",style:{padding:"16px",border:"1px solid rgba(17, 24, 39, 0.12)",borderRadius:"8px",background:"#ffffff",color:"#111827",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',maxWidth:"360px"},children:[(0,S.jsx)("p",{style:{margin:0,fontWeight:600},children:"Connection interrupted"}),(0,S.jsx)("p",{style:{margin:"6px 0 0",color:"#4b5563"},children:"Reconnecting automatically."})]})}return this.props.children}};var J=require("react"),w=(0,J.createContext)(null);var v=require("react"),Z=require("react/jsx-runtime"),Ce="@workos-inc/authkit-nextjs/components";function xe({module:t,onToken:e}){let r;try{r=t.useToken()}catch{r={}}return(0,v.useEffect)(()=>{let n=!1;async function o(){if(!(r.loading||r.isLoading))try{let u=r.getAccessToken?await r.getAccessToken():r.accessToken;n||e(u??void 0)}catch{n||e(void 0)}}o();let s=window.setInterval(()=>{o()},6e4);return()=>{n=!0,window.clearInterval(s)}},[r,r.accessToken,r.getAccessToken,r.isAuthenticated,r.isLoading,r.loading,r.user,e]),null}function K({onToken:t}){let[e,r]=(0,v.useState)(null);return(0,v.useEffect)(()=>{let n=!1;async function o(){try{let s=await import(Ce);if(!n&&typeof s.useAccessToken=="function"){r({useToken:s.useAccessToken});return}}catch{}try{let s=await import("@workos-inc/authkit-react");!n&&typeof s.useAuth=="function"&&r({useToken:s.useAuth})}catch{n||r(null)}}return o(),()=>{n=!0}},[]),e?(0,Z.jsx)(xe,{module:e,onToken:t}):null}function p(t){return t&&t.trim()?t.trim():void 0}function i(t){switch(t){case"NEXT_PUBLIC_AUTH_MODE":return p(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return p(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return p(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return p(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return p(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return p(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return p(typeof process<"u"?process.env?.[t]:void 0)}}function y(){let t=i("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return t==="jwt"||t==="customer-jwt"||t==="test-jwt"?"jwt":t==="workos"||i("VERCEL_ENV")==="production"?"workos":i("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function q(){return y()==="workos"}var f=require("react/jsx-runtime");function G({baseUrl:t,orgId:e,appId:r,jwt:n,authProvider:o,fallback:s,children:u}){let[x,R]=(0,N.useState)(),E=i("NEXT_PUBLIC_SESSION_TOKEN")??i("NEXT_PUBLIC_URUN_JWT"),F=y(),j=F==="workos"&&!n,I=n??(F==="jwt"?E:void 0)??x,z=o??i("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),fe=j&&!I,ge=(0,N.useMemo)(()=>({appId:r,baseUrl:t,orgId:e,jwt:I,authProvider:z}),[r,t,z,I,e]);return(0,f.jsxs)(l,{fallback:s,children:[j?(0,f.jsx)(K,{onToken:R}):null,fe?(0,f.jsx)("div",{role:"status","aria-live":"polite",children:"Signing in..."}):(0,f.jsx)(w.Provider,{value:ge,children:u})]})}var a=require("react"),Q=require("@urun-sh/core");function Re(t,e){return`${t}:${JSON.stringify(e??{})}`}var M=class{constructor(e,r){this._doc=e;this._notify=r;this._unsubscribeChange=this._doc.on("change",()=>this._notify())}_doc;_notify;_unsubscribeChange;get(e,r){return this._doc.get(e,r)}set(e){this._doc.set(e),this._notify()}on(e,r){return this._doc.on(e,n=>r(n))}dispose(){this._unsubscribeChange()}},B=class{constructor(e,r){this._stream=e;this._notify=r;this._unsubscribeTrack=this._stream.on("track",()=>this._notify())}_stream;_notify;_unsubscribeTrack;get track(){return this._stream.track}attach(e){return this._stream.attach(e)}detach(){return this._stream.detach()}seek(e){return this._stream.seek(e)}on(e,r){return this._stream.on(e,r)}dispose(){this._unsubscribeTrack()}},O=class{constructor(e,r){this._session=e;this._notify=r}_session;_notify;_docs=new Map;_streams=new Map;get id(){return this._session.id}doc(e){let r=this._docs.get(e);return r||(r=new M(this._session.doc(e),this._notify),this._docs.set(e,r)),r}stream(e){let r=this._streams.get(e);return r||(r=new B(this._session.stream(e),this._notify),this._streams.set(e,r)),r}disconnect(){for(let e of this._docs.values())e.dispose();for(let e of this._streams.values())e.dispose();this._docs.clear(),this._streams.clear(),this._session.disconnect(),this._notify()}};function Y(){let t=(0,a.useContext)(w);if(!t)throw new Error("useApp must be used within <UrunProvider>");if(!t.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=(0,a.useReducer)(o=>o+1,0),r=(0,a.useRef)(new Map),n=(0,a.useMemo)(()=>(0,Q.App)(t.appId,{baseUrl:t.baseUrl,orgId:t.orgId,jwt:t.jwt,authProvider:t.authProvider}),[t.appId,t.baseUrl,t.orgId,t.jwt,t.authProvider]);return(0,a.useMemo)(()=>new Proxy({},{get(o,s){if(typeof s=="string")return u=>{let x=Re(s,u),R=r.current.get(x);if(R)return R;let E=new O(n[s](u),e);return r.current.set(x,E),E}}}),[n])}var ee=new Map;function re(t,e,r){if(!r||typeof r.safeParse!="function")throw new Error(`registerComponent("${t}"): schema must be a valid Zod schema`);ee.set(t,{component:e,schema:r})}function te(t,e){let r=ee.get(t);if(!r)return{error:`Unknown component: "${t}"`};let n=r.schema.safeParse(e);return n.success?{Component:r.component,validatedProps:n.data}:{error:`Validation failed for "${t}": ${n.error.message}`}}var d=require("react/jsx-runtime");function ne({name:t,props:e,fallback:r}){let n=te(t,e);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),r?(0,d.jsx)(d.Fragment,{children:r}):(0,d.jsx)("div",{className:"urun-component-error",role:"alert",children:(0,d.jsx)("span",{className:"urun-component-error-text",children:n.error})});let o=n.Component;return(0,d.jsx)(o,{...n.validatedProps})}var g=require("zod"),m=require("react/jsx-runtime"),oe=g.z.object({step:g.z.number().min(0),total:g.z.number().min(1),label:g.z.string().optional(),variant:g.z.enum(["default","success","error"]).default("default")});function L(t){let{step:e,total:r,label:n,variant:o="default"}=t,s=Math.min(e/r*100,100),u=e>=r;return{step:e,total:r,label:n,variant:o,percentage:s,isComplete:u}}function se(t){let{step:e,total:r,label:n,variant:o,percentage:s}=L(t);return(0,m.jsxs)("div",{className:"urun-progress-card","data-variant":o,children:[n&&(0,m.jsx)("div",{className:"urun-progress-label",children:n}),(0,m.jsx)("div",{className:"urun-progress-bar",children:(0,m.jsx)("div",{className:"urun-progress-fill",style:{width:`${s}%`}})}),(0,m.jsxs)("div",{className:"urun-progress-text",children:[e,"/",r]})]})}var U=require("zod"),k=require("react/jsx-runtime"),ie=U.z.object({state:U.z.enum(["thinking","generating","idle","error"]),message:U.z.string().optional()}),Ee={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function D(t){let{state:e,message:r}=t,n=e==="thinking"||e==="generating",o=r??Ee[e]??e;return{state:e,message:o,isActive:n}}function ae(t){let{state:e,message:r,isActive:n}=D(t);return(0,k.jsxs)("span",{className:"urun-status-badge","data-state":e,children:[(0,k.jsx)("span",{className:`urun-status-indicator${n?" urun-status-pulse":""}`}),(0,k.jsx)("span",{className:"urun-status-message",children:r})]})}var _=require("react"),A=require("zod"),P=require("react/jsx-runtime"),ce=A.z.object({text:A.z.string(),streaming:A.z.boolean().default(!1)});function W(t){let{text:e,streaming:r=!1}=t,n=e.length===0;return{text:e,streaming:r,isEmpty:n}}function ue(t){let{text:e,streaming:r}=W(t),n=(0,_.useRef)(null),o=(0,_.useRef)(0);return(0,_.useEffect)(()=>{let s=n.current;s&&e.length!==o.current&&(s.textContent=e,o.current=e.length)},[e]),(0,P.jsxs)("div",{className:"urun-text-stream",children:[(0,P.jsx)("span",{ref:n,className:"urun-text-content"}),r&&(0,P.jsx)("span",{className:"urun-text-cursor"})]})}var T=require("zod"),C=require("react/jsx-runtime"),pe=T.z.object({src:T.z.string().url(),alt:T.z.string().optional(),caption:T.z.string().optional()});function X(t){let{src:e,alt:r,caption:n}=t;return{src:e,alt:r??"",caption:n}}function de(t){let{src:e,alt:r,caption:n}=X(t);return(0,C.jsxs)("figure",{className:"urun-image-frame",children:[(0,C.jsx)("img",{className:"urun-image",src:e,alt:r}),n&&(0,C.jsx)("figcaption",{className:"urun-image-caption",children:n})]})}var c=require("zod"),h=require("react/jsx-runtime"),me=c.z.object({metrics:c.z.array(c.z.object({label:c.z.string(),value:c.z.union([c.z.string(),c.z.number()]),unit:c.z.string().optional()}))});function V(t){return{metrics:t.metrics.map(r=>({...r,displayValue:r.unit?`${r.value} ${r.unit}`:String(r.value)}))}}function le(t){let{metrics:e}=V(t);return(0,h.jsx)("div",{className:"urun-metrics-panel",children:e.map((r,n)=>(0,h.jsxs)("div",{className:"urun-metric-card",children:[(0,h.jsx)("div",{className:"urun-metric-label",children:r.label}),(0,h.jsx)("div",{className:"urun-metric-value",children:r.displayValue})]},n))})}0&&(module.exports={ComponentRenderer,ImageFrame,ImageFrameSchema,MetricsPanel,MetricsPanelSchema,ProgressCard,ProgressCardSchema,StatusBadge,StatusBadgeSchema,TextStream,TextStreamSchema,UrunErrorBoundary,UrunProvider,authMode,registerComponent,urunPublicEnv,useApp,useImageFrame,useMetricsPanel,useProgressCard,useStatusBadge,useTextStream,usesWorkOSAuth});
1
+ "use strict";var L=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var Re=Object.getOwnPropertyNames;var Te=Object.prototype.hasOwnProperty;var Ee=(r,e)=>{for(var t in e)L(r,t,{get:e[t],enumerable:!0})},we=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Re(e))!Te.call(r,o)&&o!==t&&L(r,o,{get:()=>e[o],enumerable:!(n=Ue(e,o))||n.enumerable});return r};var be=r=>we(L({},"__esModule",{value:!0}),r);var Ne={};Ee(Ne,{ComponentRenderer:()=>ae,ImageFrame:()=>ge,ImageFrameSchema:()=>le,MetricsPanel:()=>ve,MetricsPanelSchema:()=>he,ProgressCard:()=>ce,ProgressCardSchema:()=>ue,StatusBadge:()=>de,StatusBadgeSchema:()=>pe,TextStream:()=>fe,TextStreamSchema:()=>me,UrunAuthProvider:()=>D,UrunErrorBoundary:()=>l,UrunJwtProvider:()=>Y,UrunProvider:()=>re,authMode:()=>y,registerComponent:()=>se,urunPublicEnv:()=>i,useApp:()=>ne,useImageFrame:()=>$,useMetricsPanel:()=>H,useProgressCard:()=>F,useStatusBadge:()=>j,useTextStream:()=>z,useUrunAuth:()=>b,usesWorkOSAuth:()=>G});module.exports=be(Ne);var h=require("react");var Z=require("react"),x=require("react/jsx-runtime"),l=class extends Z.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error("[urun] Error caught by UrunErrorBoundary:",e,t)}render(){if(this.state.error){let{fallback:e}=this.props;return typeof e=="function"?e(this.state.error):e||(0,x.jsxs)("div",{role:"status","aria-live":"polite",style:{padding:"16px",border:"1px solid rgba(17, 24, 39, 0.12)",borderRadius:"8px",background:"#ffffff",color:"#111827",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',maxWidth:"360px"},children:[(0,x.jsx)("p",{style:{margin:0,fontWeight:600},children:"Connection interrupted"}),(0,x.jsx)("p",{style:{margin:"6px 0 0",color:"#4b5563"},children:"Reconnecting automatically."})]})}return this.props.children}};var q=require("react"),w=(0,q.createContext)(null);function c(r){return r&&r.trim()?r.trim():void 0}function i(r){switch(r){case"NEXT_PUBLIC_AUTH_MODE":return c(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return c(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return c(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return c(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return c(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return c(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return c(typeof process<"u"?process.env?.[r]:void 0)}}function y(){let r=i("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return r==="jwt"||r==="customer-jwt"||r==="test-jwt"?"jwt":r==="workos"||i("VERCEL_ENV")==="production"?"workos":i("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function G(){return y()==="workos"}var g=require("react"),ee=require("react/jsx-runtime"),Q=(0,g.createContext)(null);function D({getAccessToken:r,children:e}){let t=(0,g.useMemo)(()=>({getAccessToken:r}),[r]);return(0,ee.jsx)(Q.Provider,{value:t,children:e})}var Y=D;function b(){return(0,g.useContext)(Q)}var k=require("react/jsx-runtime");function re({baseUrl:r,orgId:e,appId:t,jwt:n,authProvider:o,fallback:s,children:m}){let[E,P]=(0,h.useState)(),f=b(),Se=i("NEXT_PUBLIC_SESSION_TOKEN")??i("NEXT_PUBLIC_URUN_JWT"),J=y(),I=J==="workos"&&!n,M=n??(J==="jwt"?Se:void 0)??E,W=o??i("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),Pe=I&&!M,xe=(0,h.useMemo)(()=>({appId:t,baseUrl:r,orgId:e,jwt:M,authProvider:W}),[t,r,W,M,e]);return(0,h.useEffect)(()=>{if(!I||!f)return;let B=!1,ye=f;async function K(){try{let Ce=await ye.getAccessToken();B||P(Ce??void 0)}catch{B||P(void 0)}}K();let _e=window.setInterval(()=>{K()},6e4);return()=>{B=!0,window.clearInterval(_e)}},[f,I]),(0,k.jsx)(l,{fallback:s,children:Pe?(0,k.jsx)("div",{role:"status","aria-live":"polite",children:"Signing in..."}):(0,k.jsx)(w.Provider,{value:xe,children:m})})}var a=require("react"),te=require("@urun-sh/core");function ke(r,e){return`${r}:${JSON.stringify(e??{})}`}var O=class{constructor(e,t){this._doc=e;this._notify=t;this._unsubscribeChange=this._doc.on("change",()=>this._notify())}_doc;_notify;_unsubscribeChange;get(e,t){return this._doc.get(e,t)}set(e){this._doc.set(e),this._notify()}on(e,t){return this._doc.on(e,n=>t(n))}dispose(){this._unsubscribeChange()}},V=class{constructor(e,t){this._stream=e;this._notify=t;this._unsubscribeTrack=this._stream.on("track",()=>this._notify())}_stream;_notify;_unsubscribeTrack;get track(){return this._stream.track}attach(e){return this._stream.attach(e)}detach(){return this._stream.detach()}seek(e){return this._stream.seek(e)}on(e,t){return this._stream.on(e,t)}dispose(){this._unsubscribeTrack()}},X=class{constructor(e,t){this._session=e;this._notify=t}_session;_notify;_docs=new Map;_streams=new Map;get id(){return this._session.id}doc(e){let t=this._docs.get(e);return t||(t=new O(this._session.doc(e),this._notify),this._docs.set(e,t)),t}stream(e){let t=this._streams.get(e);return t||(t=new V(this._session.stream(e),this._notify),this._streams.set(e,t)),t}disconnect(){for(let e of this._docs.values())e.dispose();for(let e of this._streams.values())e.dispose();this._docs.clear(),this._streams.clear(),this._session.disconnect(),this._notify()}};function ne(){let r=(0,a.useContext)(w);if(!r)throw new Error("useApp must be used within <UrunProvider>");if(!r.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=(0,a.useReducer)(o=>o+1,0),t=(0,a.useRef)(new Map),n=(0,a.useMemo)(()=>(0,te.App)(r.appId,{baseUrl:r.baseUrl,orgId:r.orgId,jwt:r.jwt,authProvider:r.authProvider}),[r.appId,r.baseUrl,r.orgId,r.jwt,r.authProvider]);return(0,a.useMemo)(()=>new Proxy({},{get(o,s){if(typeof s=="string")return m=>{let E=ke(s,m),P=t.current.get(E);if(P)return P;let f=new X(n[s](m),e);return t.current.set(E,f),f}}}),[n])}var oe=new Map;function se(r,e,t){if(!t||typeof t.safeParse!="function")throw new Error(`registerComponent("${r}"): schema must be a valid Zod schema`);oe.set(r,{component:e,schema:t})}function ie(r,e){let t=oe.get(r);if(!t)return{error:`Unknown component: "${r}"`};let n=t.schema.safeParse(e);return n.success?{Component:t.component,validatedProps:n.data}:{error:`Validation failed for "${r}": ${n.error.message}`}}var p=require("react/jsx-runtime");function ae({name:r,props:e,fallback:t}){let n=ie(r,e);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),t?(0,p.jsx)(p.Fragment,{children:t}):(0,p.jsx)("div",{className:"urun-component-error",role:"alert",children:(0,p.jsx)("span",{className:"urun-component-error-text",children:n.error})});let o=n.Component;return(0,p.jsx)(o,{...n.validatedProps})}var v=require("zod"),d=require("react/jsx-runtime"),ue=v.z.object({step:v.z.number().min(0),total:v.z.number().min(1),label:v.z.string().optional(),variant:v.z.enum(["default","success","error"]).default("default")});function F(r){let{step:e,total:t,label:n,variant:o="default"}=r,s=Math.min(e/t*100,100),m=e>=t;return{step:e,total:t,label:n,variant:o,percentage:s,isComplete:m}}function ce(r){let{step:e,total:t,label:n,variant:o,percentage:s}=F(r);return(0,d.jsxs)("div",{className:"urun-progress-card","data-variant":o,children:[n&&(0,d.jsx)("div",{className:"urun-progress-label",children:n}),(0,d.jsx)("div",{className:"urun-progress-bar",children:(0,d.jsx)("div",{className:"urun-progress-fill",style:{width:`${s}%`}})}),(0,d.jsxs)("div",{className:"urun-progress-text",children:[e,"/",t]})]})}var A=require("zod"),_=require("react/jsx-runtime"),pe=A.z.object({state:A.z.enum(["thinking","generating","idle","error"]),message:A.z.string().optional()}),Ae={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function j(r){let{state:e,message:t}=r,n=e==="thinking"||e==="generating",o=t??Ae[e]??e;return{state:e,message:o,isActive:n}}function de(r){let{state:e,message:t,isActive:n}=j(r);return(0,_.jsxs)("span",{className:"urun-status-badge","data-state":e,children:[(0,_.jsx)("span",{className:`urun-status-indicator${n?" urun-status-pulse":""}`}),(0,_.jsx)("span",{className:"urun-status-message",children:t})]})}var C=require("react"),N=require("zod"),U=require("react/jsx-runtime"),me=N.z.object({text:N.z.string(),streaming:N.z.boolean().default(!1)});function z(r){let{text:e,streaming:t=!1}=r,n=e.length===0;return{text:e,streaming:t,isEmpty:n}}function fe(r){let{text:e,streaming:t}=z(r),n=(0,C.useRef)(null),o=(0,C.useRef)(0);return(0,C.useEffect)(()=>{let s=n.current;s&&e.length!==o.current&&(s.textContent=e,o.current=e.length)},[e]),(0,U.jsxs)("div",{className:"urun-text-stream",children:[(0,U.jsx)("span",{ref:n,className:"urun-text-content"}),t&&(0,U.jsx)("span",{className:"urun-text-cursor"})]})}var R=require("zod"),T=require("react/jsx-runtime"),le=R.z.object({src:R.z.string().url(),alt:R.z.string().optional(),caption:R.z.string().optional()});function $(r){let{src:e,alt:t,caption:n}=r;return{src:e,alt:t??"",caption:n}}function ge(r){let{src:e,alt:t,caption:n}=$(r);return(0,T.jsxs)("figure",{className:"urun-image-frame",children:[(0,T.jsx)("img",{className:"urun-image",src:e,alt:t}),n&&(0,T.jsx)("figcaption",{className:"urun-image-caption",children:n})]})}var u=require("zod"),S=require("react/jsx-runtime"),he=u.z.object({metrics:u.z.array(u.z.object({label:u.z.string(),value:u.z.union([u.z.string(),u.z.number()]),unit:u.z.string().optional()}))});function H(r){return{metrics:r.metrics.map(t=>({...t,displayValue:t.unit?`${t.value} ${t.unit}`:String(t.value)}))}}function ve(r){let{metrics:e}=H(r);return(0,S.jsx)("div",{className:"urun-metrics-panel",children:e.map((t,n)=>(0,S.jsxs)("div",{className:"urun-metric-card",children:[(0,S.jsx)("div",{className:"urun-metric-label",children:t.label}),(0,S.jsx)("div",{className:"urun-metric-value",children:t.displayValue})]},n))})}0&&(module.exports={ComponentRenderer,ImageFrame,ImageFrameSchema,MetricsPanel,MetricsPanelSchema,ProgressCard,ProgressCardSchema,StatusBadge,StatusBadgeSchema,TextStream,TextStreamSchema,UrunAuthProvider,UrunErrorBoundary,UrunJwtProvider,UrunProvider,authMode,registerComponent,urunPublicEnv,useApp,useImageFrame,useMetricsPanel,useProgressCard,useStatusBadge,useTextStream,useUrunAuth,usesWorkOSAuth});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{useMemo as ne,useState as oe}from"react";import{Component as Z}from"react";import{jsx as U,jsxs as q}from"react/jsx-runtime";var p=class extends Z{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,r){console.error("[urun] Error caught by UrunErrorBoundary:",e,r)}render(){if(this.state.error){let{fallback:e}=this.props;return typeof e=="function"?e(this.state.error):e||q("div",{role:"status","aria-live":"polite",style:{padding:"16px",border:"1px solid rgba(17, 24, 39, 0.12)",borderRadius:"8px",background:"#ffffff",color:"#111827",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',maxWidth:"360px"},children:[U("p",{style:{margin:0,fontWeight:600},children:"Connection interrupted"}),U("p",{style:{margin:"6px 0 0",color:"#4b5563"},children:"Reconnecting automatically."})]})}return this.props.children}};import{createContext as G}from"react";var g=G(null);import{useEffect as A,useState as Q}from"react";import{jsx as re}from"react/jsx-runtime";var Y="@workos-inc/authkit-nextjs/components";function ee({module:t,onToken:e}){let r;try{r=t.useToken()}catch{r={}}return A(()=>{let n=!1;async function o(){if(!(r.loading||r.isLoading))try{let i=r.getAccessToken?await r.getAccessToken():r.accessToken;n||e(i??void 0)}catch{n||e(void 0)}}o();let s=window.setInterval(()=>{o()},6e4);return()=>{n=!0,window.clearInterval(s)}},[r,r.accessToken,r.getAccessToken,r.isAuthenticated,r.isLoading,r.loading,r.user,e]),null}function I({onToken:t}){let[e,r]=Q(null);return A(()=>{let n=!1;async function o(){try{let s=await import(Y);if(!n&&typeof s.useAccessToken=="function"){r({useToken:s.useAccessToken});return}}catch{}try{let s=await import("@workos-inc/authkit-react");!n&&typeof s.useAuth=="function"&&r({useToken:s.useAuth})}catch{n||r(null)}}return o(),()=>{n=!0}},[]),e?re(ee,{module:e,onToken:t}):null}function u(t){return t&&t.trim()?t.trim():void 0}function a(t){switch(t){case"NEXT_PUBLIC_AUTH_MODE":return u(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return u(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return u(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return u(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return u(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return u(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return u(typeof process<"u"?process.env?.[t]:void 0)}}function h(){let t=a("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return t==="jwt"||t==="customer-jwt"||t==="test-jwt"?"jwt":t==="workos"||a("VERCEL_ENV")==="production"?"workos":a("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function te(){return h()==="workos"}import{jsx as k,jsxs as ie}from"react/jsx-runtime";function se({baseUrl:t,orgId:e,appId:r,jwt:n,authProvider:o,fallback:s,children:i}){let[m,l]=oe(),f=a("NEXT_PUBLIC_SESSION_TOKEN")??a("NEXT_PUBLIC_URUN_JWT"),b=h(),w=b==="workos"&&!n,y=n??(b==="jwt"?f:void 0)??m,N=o??a("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),J=w&&!y,K=ne(()=>({appId:r,baseUrl:t,orgId:e,jwt:y,authProvider:N}),[r,t,N,y,e]);return ie(p,{fallback:s,children:[w?k(I,{onToken:l}):null,J?k("div",{role:"status","aria-live":"polite",children:"Signing in..."}):k(g.Provider,{value:K,children:i})]})}import{useContext as ae,useMemo as M,useReducer as ce,useRef as ue}from"react";import{App as pe}from"@urun-sh/core";function de(t,e){return`${t}:${JSON.stringify(e??{})}`}var _=class{constructor(e,r){this._doc=e;this._notify=r;this._unsubscribeChange=this._doc.on("change",()=>this._notify())}_doc;_notify;_unsubscribeChange;get(e,r){return this._doc.get(e,r)}set(e){this._doc.set(e),this._notify()}on(e,r){return this._doc.on(e,n=>r(n))}dispose(){this._unsubscribeChange()}},P=class{constructor(e,r){this._stream=e;this._notify=r;this._unsubscribeTrack=this._stream.on("track",()=>this._notify())}_stream;_notify;_unsubscribeTrack;get track(){return this._stream.track}attach(e){return this._stream.attach(e)}detach(){return this._stream.detach()}seek(e){return this._stream.seek(e)}on(e,r){return this._stream.on(e,r)}dispose(){this._unsubscribeTrack()}},T=class{constructor(e,r){this._session=e;this._notify=r}_session;_notify;_docs=new Map;_streams=new Map;get id(){return this._session.id}doc(e){let r=this._docs.get(e);return r||(r=new _(this._session.doc(e),this._notify),this._docs.set(e,r)),r}stream(e){let r=this._streams.get(e);return r||(r=new P(this._session.stream(e),this._notify),this._streams.set(e,r)),r}disconnect(){for(let e of this._docs.values())e.dispose();for(let e of this._streams.values())e.dispose();this._docs.clear(),this._streams.clear(),this._session.disconnect(),this._notify()}};function me(){let t=ae(g);if(!t)throw new Error("useApp must be used within <UrunProvider>");if(!t.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=ce(o=>o+1,0),r=ue(new Map),n=M(()=>pe(t.appId,{baseUrl:t.baseUrl,orgId:t.orgId,jwt:t.jwt,authProvider:t.authProvider}),[t.appId,t.baseUrl,t.orgId,t.jwt,t.authProvider]);return M(()=>new Proxy({},{get(o,s){if(typeof s=="string")return i=>{let m=de(s,i),l=r.current.get(m);if(l)return l;let f=new T(n[s](i),e);return r.current.set(m,f),f}}}),[n])}var B=new Map;function le(t,e,r){if(!r||typeof r.safeParse!="function")throw new Error(`registerComponent("${t}"): schema must be a valid Zod schema`);B.set(t,{component:e,schema:r})}function O(t,e){let r=B.get(t);if(!r)return{error:`Unknown component: "${t}"`};let n=r.schema.safeParse(e);return n.success?{Component:r.component,validatedProps:n.data}:{error:`Validation failed for "${t}": ${n.error.message}`}}import{Fragment as ge,jsx as S}from"react/jsx-runtime";function fe({name:t,props:e,fallback:r}){let n=O(t,e);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),r?S(ge,{children:r}):S("div",{className:"urun-component-error",role:"alert",children:S("span",{className:"urun-component-error-text",children:n.error})});let o=n.Component;return S(o,{...n.validatedProps})}import{z as d}from"zod";import{jsx as C,jsxs as L}from"react/jsx-runtime";var he=d.object({step:d.number().min(0),total:d.number().min(1),label:d.string().optional(),variant:d.enum(["default","success","error"]).default("default")});function D(t){let{step:e,total:r,label:n,variant:o="default"}=t,s=Math.min(e/r*100,100),i=e>=r;return{step:e,total:r,label:n,variant:o,percentage:s,isComplete:i}}function Se(t){let{step:e,total:r,label:n,variant:o,percentage:s}=D(t);return L("div",{className:"urun-progress-card","data-variant":o,children:[n&&C("div",{className:"urun-progress-label",children:n}),C("div",{className:"urun-progress-bar",children:C("div",{className:"urun-progress-fill",style:{width:`${s}%`}})}),L("div",{className:"urun-progress-text",children:[e,"/",r]})]})}import{z as x}from"zod";import{jsx as W,jsxs as _e}from"react/jsx-runtime";var ve=x.object({state:x.enum(["thinking","generating","idle","error"]),message:x.string().optional()}),ye={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function X(t){let{state:e,message:r}=t,n=e==="thinking"||e==="generating",o=r??ye[e]??e;return{state:e,message:o,isActive:n}}function ke(t){let{state:e,message:r,isActive:n}=X(t);return _e("span",{className:"urun-status-badge","data-state":e,children:[W("span",{className:`urun-status-indicator${n?" urun-status-pulse":""}`}),W("span",{className:"urun-status-message",children:r})]})}import{useRef as V,useEffect as Pe}from"react";import{z as R}from"zod";import{jsx as F,jsxs as xe}from"react/jsx-runtime";var Te=R.object({text:R.string(),streaming:R.boolean().default(!1)});function j(t){let{text:e,streaming:r=!1}=t,n=e.length===0;return{text:e,streaming:r,isEmpty:n}}function Ce(t){let{text:e,streaming:r}=j(t),n=V(null),o=V(0);return Pe(()=>{let s=n.current;s&&e.length!==o.current&&(s.textContent=e,o.current=e.length)},[e]),xe("div",{className:"urun-text-stream",children:[F("span",{ref:n,className:"urun-text-content"}),r&&F("span",{className:"urun-text-cursor"})]})}import{z as v}from"zod";import{jsx as z,jsxs as be}from"react/jsx-runtime";var Re=v.object({src:v.string().url(),alt:v.string().optional(),caption:v.string().optional()});function $(t){let{src:e,alt:r,caption:n}=t;return{src:e,alt:r??"",caption:n}}function Ee(t){let{src:e,alt:r,caption:n}=$(t);return be("figure",{className:"urun-image-frame",children:[z("img",{className:"urun-image",src:e,alt:r}),n&&z("figcaption",{className:"urun-image-caption",children:n})]})}import{z as c}from"zod";import{jsx as E,jsxs as Ue}from"react/jsx-runtime";var we=c.object({metrics:c.array(c.object({label:c.string(),value:c.union([c.string(),c.number()]),unit:c.string().optional()}))});function H(t){return{metrics:t.metrics.map(r=>({...r,displayValue:r.unit?`${r.value} ${r.unit}`:String(r.value)}))}}function Ne(t){let{metrics:e}=H(t);return E("div",{className:"urun-metrics-panel",children:e.map((r,n)=>Ue("div",{className:"urun-metric-card",children:[E("div",{className:"urun-metric-label",children:r.label}),E("div",{className:"urun-metric-value",children:r.displayValue})]},n))})}export{fe as ComponentRenderer,Ee as ImageFrame,Re as ImageFrameSchema,Ne as MetricsPanel,we as MetricsPanelSchema,Se as ProgressCard,he as ProgressCardSchema,ke as StatusBadge,ve as StatusBadgeSchema,Ce as TextStream,Te as TextStreamSchema,p as UrunErrorBoundary,se as UrunProvider,h as authMode,le as registerComponent,a as urunPublicEnv,me as useApp,$ as useImageFrame,H as useMetricsPanel,D as useProgressCard,X as useStatusBadge,j as useTextStream,te as usesWorkOSAuth};
1
+ import{a as ee,b as re,c as x}from"./chunk-OAFPMVUO.mjs";import{useEffect as ie,useMemo as ae,useState as ce}from"react";import{Component as te}from"react";import{jsx as B,jsxs as ne}from"react/jsx-runtime";var m=class extends te{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,r){console.error("[urun] Error caught by UrunErrorBoundary:",e,r)}render(){if(this.state.error){let{fallback:e}=this.props;return typeof e=="function"?e(this.state.error):e||ne("div",{role:"status","aria-live":"polite",style:{padding:"16px",border:"1px solid rgba(17, 24, 39, 0.12)",borderRadius:"8px",background:"#ffffff",color:"#111827",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',maxWidth:"360px"},children:[B("p",{style:{margin:0,fontWeight:600},children:"Connection interrupted"}),B("p",{style:{margin:"6px 0 0",color:"#4b5563"},children:"Reconnecting automatically."})]})}return this.props.children}};import{createContext as oe}from"react";var l=oe(null);function c(t){return t&&t.trim()?t.trim():void 0}function i(t){switch(t){case"NEXT_PUBLIC_AUTH_MODE":return c(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return c(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return c(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return c(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return c(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return c(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return c(typeof process<"u"?process.env?.[t]:void 0)}}function h(){let t=i("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return t==="jwt"||t==="customer-jwt"||t==="test-jwt"?"jwt":t==="workos"||i("VERCEL_ENV")==="production"?"workos":i("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function se(){return h()==="workos"}import{jsx as C}from"react/jsx-runtime";function ue({baseUrl:t,orgId:e,appId:r,jwt:n,authProvider:o,fallback:s,children:u}){let[g,d]=ce(),p=x(),K=i("NEXT_PUBLIC_SESSION_TOKEN")??i("NEXT_PUBLIC_URUN_JWT"),N=h(),y=N==="workos"&&!n,P=n??(N==="jwt"?K:void 0)??g,I=o??i("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),Z=y&&!P,q=ae(()=>({appId:r,baseUrl:t,orgId:e,jwt:P,authProvider:I}),[r,t,I,P,e]);return ie(()=>{if(!y||!p)return;let _=!1,G=p;async function A(){try{let Y=await G.getAccessToken();_||d(Y??void 0)}catch{_||d(void 0)}}A();let Q=window.setInterval(()=>{A()},6e4);return()=>{_=!0,window.clearInterval(Q)}},[p,y]),C(m,{fallback:s,children:Z?C("div",{role:"status","aria-live":"polite",children:"Signing in..."}):C(l.Provider,{value:q,children:u})})}import{useContext as pe,useMemo as M,useReducer as de,useRef as me}from"react";import{App as fe}from"@urun-sh/core";function ge(t,e){return`${t}:${JSON.stringify(e??{})}`}var E=class{constructor(e,r){this._doc=e;this._notify=r;this._unsubscribeChange=this._doc.on("change",()=>this._notify())}_doc;_notify;_unsubscribeChange;get(e,r){return this._doc.get(e,r)}set(e){this._doc.set(e),this._notify()}on(e,r){return this._doc.on(e,n=>r(n))}dispose(){this._unsubscribeChange()}},R=class{constructor(e,r){this._stream=e;this._notify=r;this._unsubscribeTrack=this._stream.on("track",()=>this._notify())}_stream;_notify;_unsubscribeTrack;get track(){return this._stream.track}attach(e){return this._stream.attach(e)}detach(){return this._stream.detach()}seek(e){return this._stream.seek(e)}on(e,r){return this._stream.on(e,r)}dispose(){this._unsubscribeTrack()}},T=class{constructor(e,r){this._session=e;this._notify=r}_session;_notify;_docs=new Map;_streams=new Map;get id(){return this._session.id}doc(e){let r=this._docs.get(e);return r||(r=new E(this._session.doc(e),this._notify),this._docs.set(e,r)),r}stream(e){let r=this._streams.get(e);return r||(r=new R(this._session.stream(e),this._notify),this._streams.set(e,r)),r}disconnect(){for(let e of this._docs.values())e.dispose();for(let e of this._streams.values())e.dispose();this._docs.clear(),this._streams.clear(),this._session.disconnect(),this._notify()}};function le(){let t=pe(l);if(!t)throw new Error("useApp must be used within <UrunProvider>");if(!t.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=de(o=>o+1,0),r=me(new Map),n=M(()=>fe(t.appId,{baseUrl:t.baseUrl,orgId:t.orgId,jwt:t.jwt,authProvider:t.authProvider}),[t.appId,t.baseUrl,t.orgId,t.jwt,t.authProvider]);return M(()=>new Proxy({},{get(o,s){if(typeof s=="string")return u=>{let g=ge(s,u),d=r.current.get(g);if(d)return d;let p=new T(n[s](u),e);return r.current.set(g,p),p}}}),[n])}var L=new Map;function he(t,e,r){if(!r||typeof r.safeParse!="function")throw new Error(`registerComponent("${t}"): schema must be a valid Zod schema`);L.set(t,{component:e,schema:r})}function D(t,e){let r=L.get(t);if(!r)return{error:`Unknown component: "${t}"`};let n=r.schema.safeParse(e);return n.success?{Component:r.component,validatedProps:n.data}:{error:`Validation failed for "${t}": ${n.error.message}`}}import{Fragment as Se,jsx as v}from"react/jsx-runtime";function ve({name:t,props:e,fallback:r}){let n=D(t,e);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),r?v(Se,{children:r}):v("div",{className:"urun-component-error",role:"alert",children:v("span",{className:"urun-component-error-text",children:n.error})});let o=n.Component;return v(o,{...n.validatedProps})}import{z as f}from"zod";import{jsx as b,jsxs as O}from"react/jsx-runtime";var ye=f.object({step:f.number().min(0),total:f.number().min(1),label:f.string().optional(),variant:f.enum(["default","success","error"]).default("default")});function V(t){let{step:e,total:r,label:n,variant:o="default"}=t,s=Math.min(e/r*100,100),u=e>=r;return{step:e,total:r,label:n,variant:o,percentage:s,isComplete:u}}function Pe(t){let{step:e,total:r,label:n,variant:o,percentage:s}=V(t);return O("div",{className:"urun-progress-card","data-variant":o,children:[n&&b("div",{className:"urun-progress-label",children:n}),b("div",{className:"urun-progress-bar",children:b("div",{className:"urun-progress-fill",style:{width:`${s}%`}})}),O("div",{className:"urun-progress-text",children:[e,"/",r]})]})}import{z as w}from"zod";import{jsx as X,jsxs as Ee}from"react/jsx-runtime";var _e=w.object({state:w.enum(["thinking","generating","idle","error"]),message:w.string().optional()}),xe={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function F(t){let{state:e,message:r}=t,n=e==="thinking"||e==="generating",o=r??xe[e]??e;return{state:e,message:o,isActive:n}}function Ce(t){let{state:e,message:r,isActive:n}=F(t);return Ee("span",{className:"urun-status-badge","data-state":e,children:[X("span",{className:`urun-status-indicator${n?" urun-status-pulse":""}`}),X("span",{className:"urun-status-message",children:r})]})}import{useRef as j,useEffect as Re}from"react";import{z as U}from"zod";import{jsx as z,jsxs as we}from"react/jsx-runtime";var Te=U.object({text:U.string(),streaming:U.boolean().default(!1)});function $(t){let{text:e,streaming:r=!1}=t,n=e.length===0;return{text:e,streaming:r,isEmpty:n}}function be(t){let{text:e,streaming:r}=$(t),n=j(null),o=j(0);return Re(()=>{let s=n.current;s&&e.length!==o.current&&(s.textContent=e,o.current=e.length)},[e]),we("div",{className:"urun-text-stream",children:[z("span",{ref:n,className:"urun-text-content"}),r&&z("span",{className:"urun-text-cursor"})]})}import{z as S}from"zod";import{jsx as H,jsxs as Ne}from"react/jsx-runtime";var Ue=S.object({src:S.string().url(),alt:S.string().optional(),caption:S.string().optional()});function J(t){let{src:e,alt:r,caption:n}=t;return{src:e,alt:r??"",caption:n}}function ke(t){let{src:e,alt:r,caption:n}=J(t);return Ne("figure",{className:"urun-image-frame",children:[H("img",{className:"urun-image",src:e,alt:r}),n&&H("figcaption",{className:"urun-image-caption",children:n})]})}import{z as a}from"zod";import{jsx as k,jsxs as Be}from"react/jsx-runtime";var Ie=a.object({metrics:a.array(a.object({label:a.string(),value:a.union([a.string(),a.number()]),unit:a.string().optional()}))});function W(t){return{metrics:t.metrics.map(r=>({...r,displayValue:r.unit?`${r.value} ${r.unit}`:String(r.value)}))}}function Ae(t){let{metrics:e}=W(t);return k("div",{className:"urun-metrics-panel",children:e.map((r,n)=>Be("div",{className:"urun-metric-card",children:[k("div",{className:"urun-metric-label",children:r.label}),k("div",{className:"urun-metric-value",children:r.displayValue})]},n))})}export{ve as ComponentRenderer,ke as ImageFrame,Ue as ImageFrameSchema,Ae as MetricsPanel,Ie as MetricsPanelSchema,Pe as ProgressCard,ye as ProgressCardSchema,Ce as StatusBadge,_e as StatusBadgeSchema,be as TextStream,Te as TextStreamSchema,ee as UrunAuthProvider,m as UrunErrorBoundary,re as UrunJwtProvider,ue as UrunProvider,h as authMode,he as registerComponent,i as urunPublicEnv,le as useApp,J as useImageFrame,W as useMetricsPanel,V as useProgressCard,F as useStatusBadge,$ as useTextStream,x as useUrunAuth,se as usesWorkOSAuth};
@@ -0,0 +1,8 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ComponentProps } from 'react';
3
+ import { AuthKitProvider } from '@workos-inc/authkit-react';
4
+
5
+ type WorkOSAuthKitProviderProps = ComponentProps<typeof AuthKitProvider>;
6
+ declare function UrunWorkOSProvider({ children, ...props }: WorkOSAuthKitProviderProps): react_jsx_runtime.JSX.Element;
7
+
8
+ export { UrunWorkOSProvider };
@@ -0,0 +1,8 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ComponentProps } from 'react';
3
+ import { AuthKitProvider } from '@workos-inc/authkit-react';
4
+
5
+ type WorkOSAuthKitProviderProps = ComponentProps<typeof AuthKitProvider>;
6
+ declare function UrunWorkOSProvider({ children, ...props }: WorkOSAuthKitProviderProps): react_jsx_runtime.JSX.Element;
7
+
8
+ export { UrunWorkOSProvider };
package/dist/workos.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var s=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var U=(r,e)=>{for(var o in e)s(r,o,{get:e[o],enumerable:!0})},k=(r,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of v(e))!h.call(r,t)&&t!==o&&s(r,t,{get:()=>e[t],enumerable:!(i=P(e,t))||i.enumerable});return r};var l=r=>k(s({},"__esModule",{value:!0}),r);var T={};U(T,{UrunWorkOSProvider:()=>f});module.exports=l(T);var p=require("react"),c=require("@workos-inc/authkit-react");var n=require("react"),d=require("react/jsx-runtime"),a=(0,n.createContext)(null);function A({getAccessToken:r,children:e}){let o=(0,n.useMemo)(()=>({getAccessToken:r}),[r]);return(0,d.jsx)(a.Provider,{value:o,children:e})}var u=require("react/jsx-runtime");function x({children:r}){let e=(0,c.useAuth)(),o=(0,p.useCallback)(()=>e.getAccessToken(),[e]);return(0,u.jsx)(A,{getAccessToken:o,children:r})}function f({children:r,...e}){return(0,u.jsx)(c.AuthKitProvider,{...e,children:(0,u.jsx)(x,{children:r})})}0&&(module.exports={UrunWorkOSProvider});
@@ -0,0 +1 @@
1
+ import{a as t}from"./chunk-OAFPMVUO.mjs";import{useCallback as n}from"react";import{AuthKitProvider as c,useAuth as s}from"@workos-inc/authkit-react";import{jsx as e}from"react/jsx-runtime";function u({children:r}){let o=s(),i=n(()=>o.getAccessToken(),[o]);return e(t,{getAccessToken:i,children:r})}function A({children:r,...o}){return e(c,{...o,children:e(u,{children:r})})}export{A as UrunWorkOSProvider};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@urun-sh/react",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "description": "React bindings for the urun TypeScript SDK",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,6 +25,11 @@
25
25
  "import": "./dist/index.mjs",
26
26
  "require": "./dist/index.js"
27
27
  },
28
+ "./workos": {
29
+ "types": "./dist/workos.d.ts",
30
+ "import": "./dist/workos.mjs",
31
+ "require": "./dist/workos.js"
32
+ },
28
33
  "./styles.css": "./dist/styles.css",
29
34
  "./package.json": "./package.json"
30
35
  },
@@ -36,7 +41,7 @@
36
41
  },
37
42
  "peerDependencies": {
38
43
  "react": "^18.2.0 || ^19.0.0",
39
- "@urun-sh/core": "^0.1.15",
44
+ "@urun-sh/core": "^0.1.16",
40
45
  "@workos-inc/authkit-react": "^0.15.0"
41
46
  },
42
47
  "dependencies": {
@@ -50,6 +55,7 @@
50
55
  "happy-dom": "^20.9.0",
51
56
  "typescript": "^5.3.0",
52
57
  "@testing-library/react": "^16.0.0",
58
+ "@testing-library/dom": "^10.0.0",
53
59
  "@types/react": "^19.2.15",
54
60
  "react": "^19.2.6",
55
61
  "react-dom": "^19.2.6",