PageSourceSearch

https://virtual.revenite.ai/index-ysxq8vnm.js

js revenite.ai collected 2026-10-04 02:24:26 UTC 40,052 bytes, 15 lines download raw bytes

1import{Ze as Qe}from"/dashboard-entry-7461qqj7.js";import"/dashboard-entry-h7nmhdk5.js";import{ah as vt,bh as pa,ch as bt,eh as Ye,nh as fa,oh as ga,ph as va,qh as ba,rh as yt,sh as ht,th as St,uh as At,vh as ya,wh as ha,xh as Ct}from"/dashboard-entry-ew2knmnx.js";import{yh as xa}from"/dashboard-entry-g8tpcrsm.js";import"/dashboard-entry-rvqqg0pc.js";import"/dashboard-entry-1hsmyh3f.js";import"/dashboard-entry-qdyjqvbk.js";import"/dashboard-entry-2fnhj88d.js";import"/dashboard-entry-n53q24nr.js";import"/dashboard-entry-65r6n07m.js";import{pr as ia}from"/dashboard-entry-q6cyr8vq.js";import{Ar as Fe,Br as Pe,Dr as Le,Er as Ke,Fr as Me,Gr as K,xr as Ee,yr as we,zr as Ie}from"/dashboard-entry-gk6rewdy.js";import"/dashboard-entry-44ybeq8s.js";import"/dashboard-entry-a38fehj6.js";import{Zr as aa}from"/dashboard-entry-sg8cczp4.js";import{ns as na,os as sa,ps as oa}from"/dashboard-entry-xk324xqj.js";import{Bs as nt,ys as it,zs as Tt}from"/dashboard-entry-ardvmh01.js";import{Ds as be,Es as ye,Fs as he,Gs as Se,Hs as Ae,Is as Ce}from"/dashboard-entry-fvdh9c4d.js";import"/dashboard-entry-jz85y609.js";import{lu as P}from"/dashboard-entry-hkn80g40.js";import{ru as z}from"/dashboard-entry-1gp7bjz7.js";import{tu as Ge}from"/dashboard-entry-qv5xe8rf.js";import{$w as ft,Ax as Xt,Bx as Zt,Cw as Ne,Cy as O,Dw as Aa,EA as Wt,FA as lt,Fy as v,GA as We,Gy as Mt,HA as Je,Hx as ie,IA as X,Iy as Bt,JA as Ze,Jw as Ra,Jy as zt,Jz as de,Ky as Ht,Kz as ue,Lw as Ca,Ly as $t,Lz as me,My as Ot,Mz as pe,Ny as _t,Nz as fe,Oy as Ut,Oz as oe,Pw as kt,Sw as Rt,Sy as at,Tw as ut,Tx as Pt,Uw as Ft,Ux as ea,Vx as Lt,Xx as ta,Yz as N,az as da,bz as ua,cz as ma,dz as Be,fz as ze,gz as He,hy as Kt,hz as ct,iz as $e,jz as Oe,kx as Yt,kz as Vt,lz as Gt,mz as qt,nx as ca,oz as rt,rz as Qt,sx as ot,ux as tt,uz as dt,vx as Re,vz as _e,wz as Ue,xz as Ve,yz as re,zx as gt}from"/dashboard-entry-dxn1v5ey.js";import{LA as Y,NA as ve,OA as e,PA as n}from"/dashboard-entry-wrw522hm.js";import{TA as j}from"/dashboard-entry-7eswmxz0.js";var et=j(Y(),1);var h=j(Y(),1);function W(t){return`${/^(rvk_[^_]+_)/.exec(t.keyPrefix)?.[1]??t.keyPrefix}...${t.last4}`}function Dt(t,a){if(!t)return{relative:"-",absolute:"-"};let i=Date.parse(t);if(Number.isNaN(i))return{relative:t,absolute:t};return{relative:a(i),absolute:nt(i)}}function ne(t){return Dt(t,it)}function Nt(t){return Dt(t,Tt)}function st(t){if(typeof t!=="number")return{relative:"-",absolute:"-"};return{relative:it(t),absolute:nt(t)}}function Te({value:t,label:a="Copy",copiedLabel:i="Copied",iconOnly:s=!1}){return n(v,{type:"button",variant:"outline",size:s?"icon-sm":"sm","aria-label":s?a:void 0,title:s?a:void 0,onClick:()=>{(async()=>{try{await navigator.clipboard.writeText(t),P.success(i,{position:"top-center",duration:2000})}catch{P.error("Failed to copy",{position:"top-center",duration:2000})}})()},children:[e(Re,{"data-icon":s?void 0:"inline-start"}),s?null:a]})}function De({status:t}){let a=(()=>{switch(t){case"completed":return{label:"Completed",variant:"success",icon:e(kt,{})};case"pending":return{label:"Pending",variant:"info",icon:e(tt,{})};case"expired":return{label:"Expired",variant:"warning",icon:e(tt,{})};case"canceled":return{label:"Canceled",variant:"secondary",icon:e(Rt,{})}}})();return n(at,{variant:a.variant,children:[a.icon,a.label]})}function se(t){return t==="test"?"Sandbox":"Live"}function J({mode:t}){return e(at,{variant:t==="test"?"warning":"outline",children:se(t)})}function Et(){return n("span",{className:"inline-flex min-w-0 items-center gap-1 text-muted-foreground",children:[e(ie,{className:"size-4 shrink-0"}),"Deleted key"]})}var Fa=[{value:"all",label:"All Statuses"},{value:"pending",label:"Pending"},{value:"completed",label:"Completed"},{value:"expired",label:"Expired"},{value:"canceled",label:"Canceled"}],wt=[{value:"7",label:"Last 7 days"},{value:"15",label:"Last 15 days"},{value:"30",label:"Last 30 days"},{value:"90",label:"Last 90 days"},{value:"all",label:"All time"}],Pa=[{value:"all",label:"All Environments"},{value:"test",label:"Sandbox"},{value:"live",label:"Live"}],ge="all";function La(t){if(!t.apiKey)return"deleted key";return`${t.apiKey.name} ${W(t.apiKey)}`}function Ka(t){if(t==="all")return null;let a=Number(t);return new Date(Date.now()-a*24*60*60*1000).toISOString()}function Ma({apiKeyFilter:t,cursor:a,dateRangeFilter:i,environmentFilter:s,statusFilter:r}){let o=new URLSearchParams({limit:"100"}),l=Ka(i);if(l)o.set("createdAfter",l);if(r!=="all")o.set("status",r);
1if(s!=="all")o.set("mode",s);if(t!==ge)o.set("apiKeyId",t);if(a)o.set("cursor",a);return`/api/developers/apiEvals/list?${o.toString()}`}function Ba(t){return wt.find((a)=>a.value===t)?.label??"selected range"}function za(t,a){if(a.trim())return"No evaluations match this search";if(t!=="all")return`No evaluations in ${Ba(t).toLowerCase()}`;return"No evaluations match these filters"}function Ha(){return[{id:"search",accessorFn:(t)=>[t.evaluation.id,t.evaluation.externalId??"",se(t.evaluation.mode),La(t)].join(" "),enableHiding:!1,enableSorting:!1,header:()=>null,cell:()=>null},{id:"id",meta:{label:"Evaluation"},accessorFn:(t)=>t.evaluation.id,enableHiding:!1,size:300,minSize:220,maxSize:360,header:({column:t})=>e(K,{column:t,children:"Evaluation"}),cell:({row:t})=>e("span",{className:"truncate font-mono",title:t.original.evaluation.id,children:t.original.evaluation.id})},{id:"status",accessorFn:(t)=>t.evaluation.status,meta:{label:"Status"},enableHiding:!1,size:130,minSize:110,maxSize:160,header:({column:t})=>e(K,{column:t,children:"Status"}),cell:({row:t})=>e(De,{status:t.original.evaluation.status})},{id:"mode",accessorFn:(t)=>t.evaluation.mode,meta:{label:"Environment"},enableHiding:!1,size:120,minSize:100,maxSize:150,header:({column:t})=>e(K,{column:t,children:"Environment"}),cell:({row:t})=>e(J,{mode:t.original.evaluation.mode})},{id:"createdAt",accessorFn:(t)=>Date.parse(t.evaluation.createdAt),meta:{label:"Created"},enableHiding:!0,size:130,minSize:110,maxSize:170,header:({column:t})=>e(K,{column:t,children:"Created"}),cell:({row:t})=>{let a=ne(t.original.evaluation.createdAt);return e("span",{title:a.absolute,children:a.relative})}},{id:"completedAt",accessorFn:(t)=>t.evaluation.completedAt?Date.parse(t.evaluation.completedAt):0,meta:{label:"Completed"},enableHiding:!0,size:130,minSize:110,maxSize:170,header:({column:t})=>e(K,{column:t,children:"Completed"}),cell:({row:t})=>{let a=ne(t.original.evaluation.completedAt);return e("span",{title:a.absolute,children:a.relative})}}]}function It(){let{fetchWithAuth:t}=z(),a=Ne(),[i,s]=h.default.useState([]),[r,o]=h.default.useState([]),[l,c]=h.default.useState(null),[u,g]=h.default.useState(!0),[b,p]=h.default.useState(!1),[T,k]=h.default.useState(null),[f,D]=h.default.useState(null),[A,m]=h.default.useState("15"),[E,B]=h.default.useState("all"),[x,M]=h.default.useState("all"),[L,q]=h.default.useState(ge),[I,F]=h.default.useState([{id:"createdAt",desc:!0}]),[Z,Q]=h.default.useState([]),[H,ee]=h.default.useState({search:!1}),[_,te]=h.default.useState(""),U=T??f,y=h.default.useCallback(async()=>{D(null);let d=await t("/api/developers/apiKeys/list");if(d.error)D(d.error);else o(d.data?.keys??[])},[t]),w=h.default.useCallback(async(d)=>{let ae=Boolean(d);if(ae)p(!0);else g(!0);k(null);let ke=await t(Ma({apiKeyFilter:L,cursor:d,dateRangeFilter:A,environmentFilter:x,statusFilter:E}));if(ke.error){if(k(ke.error),!ae)s([]),c(null)}else{let xt=ke.data?.evaluations??[];s((Ia)=>ae?[...Ia,...xt]:xt),c(ke.data?.nextCursor??null)}if(ae)p(!1);else g(!1)},[L,A,x,t,E]);h.default.useEffect(()=>{w()},[w]),h.default.useEffect(()=>{y()},[y]);let C=h.default.useCallback((d)=>{a(`/developers/evaluations/${encodeURIComponent(d)}`,{state:{from:"/developers"}})},[a]),Ta=h.default.useMemo(()=>r.map((d)=>({value:d.id,label:`${d.name} (${se(d.mode)})`})).sort((d,ae)=>d.label.localeCompare(ae.label)),[r]),Da=h.default.useMemo(()=>Ha(),[]),V=Pe({data:i,columns:Da,state:{sorting:I,columnFilters:Z,columnVisibility:H},onSortingChange:F,onColumnFiltersChange:Q,onColumnVisibilityChange:ee,getCoreRowModel:Ee(),getSortedRowModel:Fe(),getFilteredRowModel:we(),getPaginationRowModel:Ie()});h.default.useEffect(()=>{V.setPageIndex(0)},[L,A,x,_,E,V]);let Na=A!=="all"||E!=="all"||x!=="all"||L!==ge||Boolean(_.trim()),Ea=h.default.useCallback(()=>{m("all"),B("all"),M("all"),q(ge),te(""),V.getColumn("search")?.setFilterValue(""),V.setPageIndex(0)},[V]),wa=Na?{title:za(A,_),description:l?"Clear filters, widen the date range, or load more evaluations to search older results.":"Try widening the date range or clearing filters.",icon:e(ot,{}),primaryAction:{label:"Clear filters",onClick:Ea,variant:"outline"}}:{title:"No API evaluations yet",description:"Evaluations created with Integration API keys will appear here.",icon:e(ot,{}),primaryAction:{label:"View API keys",onClick:()=>{a("/developers")},variant:"outline"}};return n("div",{className:"flex flex-col",children:[U?e("div",{className:"mb-4 rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-sm text-destructive",children:U}):null,n("div",{className:"mb-4 grid w-full grid-cols-1 gap-2 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-[minmax(16rem,2fr)_minmax(9rem,1fr)_minmax(9rem,1fr)_minmax(10rem,1fr)_minmax(11rem,1.35fr)]",children:[e(Me,{table:V,columnId:"search",quickFilterText:_,onQuickFilterTextChange:te,placeholder:"Search evals or external IDs...",className:"h-8 w-full min-w-0"}),n(de,{value:A,onValueChange:(d)=>{m(d)},children:[e(pe,{size:"sm",className:"w-full min-w-0","aria-label":"Filter by created date range",children:e(me,{})}),e(fe,{align:"end",children:e(ue,{children:wt.map((d)=>e(oe,{value:d.value,children:d.label},d.value))})})]}),n(de,{value:E,onValueChange:(d)=>{B(d)},children:[e(pe,{size:"sm",className:"w-full min-w-0","aria-label":"Filter by status",children:e(me,{})}),e(fe,{align:"end",children:e(ue,{children:Fa.map((d)=>e(oe,{value:d.value,children:d.label},d.value))})})]}),n(de,{value:L,onValueChange:q,children:[e(pe,{size:"sm",className:"w-full min-w-0","aria-label":"Filter by API key",children:e(me,{})}),e(fe,{align:"end",className:"max-h-80",children:n(ue,{children:[e(
1oe,{value:ge,children:"All API Keys"}),Ta.map((d)=>e(oe,{value:d.value,children:d.label},d.value))]})})]}),n(de,{value:x,onValueChange:(d)=>{M(d)},children:[e(pe,{size:"sm",className:"w-full min-w-0","aria-label":"Filter by environment",children:e(me,{})}),e(fe,{align:"end",children:e(ue,{children:Pa.map((d)=>e(oe,{value:d.value,children:d.label},d.value))})})]})]}),e(Ke,{table:V,isLoading:u,noTruncateColumnIds:["status","mode"],onRowClick:(d)=>{C(d.original.evaluation.id)},emptyState:wa}),e(Le,{table:V}),l?e("div",{className:"flex justify-end",children:e(v,{type:"button",variant:"outline",size:"sm",disabled:b,onClick:()=>{w(l)},children:b?"Loading...":"Load more"})}):null]})}var S=j(Y(),1);function $a({apiKey:t,onDelete:a,onRename:i}){let[s,r]=S.default.useState(!1),[o,l]=S.default.useState(!1),[c,u]=S.default.useState(!1),[g,b]=S.default.useState(t.name),[p,T]=S.default.useState(!1),k=g.trim(),f=p||k.length===0||k.length>100||k===t.name,D=(m)=>{if(m)b(t.name);u(m)},A=()=>{if(f)return;(async()=>{T(!0);try{await i(t.id,k),u(!1)}finally{T(!1)}})()};return n(ve,{children:[n(Vt,{children:[e(Gt,{asChild:!0,children:e(v,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"More actions",onClick:(m)=>{m.stopPropagation()},children:e(Ft,{})})}),n(qt,{align:"end",className:"w-48 whitespace-nowrap",children:[n(rt,{onSelect:()=>{D(!0)},children:[e(Pt,{}),"Edit"]}),e(Qt,{}),n(rt,{variant:"destructive",onSelect:()=>{r(!0)},children:[e(Kt,{}),"Delete API key"]})]})]}),e(Be,{open:c,onOpenChange:D,children:n(ze,{children:[n(He,{children:[e($e,{children:"Rename API Key"}),e(Oe,{children:"Update the name used to identify where this key is deployed."})]}),e(dt,{children:n(_e,{children:[e(Ue,{htmlFor:"api-key-rename",children:"Name"}),e(re,{id:"api-key-rename",value:g,maxLength:100,placeholder:"Production backend",disabled:p,onChange:(m)=>{b(m.target.value)},onKeyDown:(m)=>{if(m.key==="Enter")m.preventDefault(),A()}}),e(Ve,{children:"Use a name that identifies where this key is deployed."})]})}),n(ct,{children:[e(v,{type:"button",variant:"outline",disabled:p,onClick:()=>{u(!1)},children:"Cancel"}),e(v,{type:"button",disabled:f,onClick:A,children:"Save"})]})]})}),e(Mt,{open:s,onOpenChange:r,children:n(Bt,{size:"default",children:[n(zt,{children:[e($t,{children:"Delete API key"}),n(Ot,{children:["Deleting"," ",e("span",{className:"font-medium",children:t.name})," ","immediately stops API requests that use this key. This cannot be undone."]})]}),n(Ht,{children:[e(Ut,{type:"button",disabled:o,children:"Cancel"}),e(_t,{type:"button",variant:"destructive",disabled:o,onClick:()=>{(async()=>{l(!0);try{await a(t.id),r(!1)}finally{l(!1)}})()},children:"Delete API key"})]})]})})]})}function Oa({onDelete:t,onRename:a}){return[{id:"name",meta:{label:"Name"},accessorFn:(i)=>`${i.name} ${W(i)} ${se(i.mode)}`,enableHiding:!1,size:260,minSize:180,maxSize:360,header:({column:i})=>e(K,{column:i,children:"Name"}),cell:({row:i})=>e("div",{className:"flex min-w-0 flex-col gap-1",children:e("span",{className:"truncate font-medium",title:i.original.name,children:i.original.name})})},{id:"key",accessorFn:(i)=>W(i),meta:{label:"Key"},enableHiding:!1,size:180,minSize:150,maxSize:240,header:({column:i})=>e(K,{column:i,children:"Key"}),cell:({row:i})=>e("span",{className:"truncate font-mono text-xs text-muted-foreground",title:W(i.original),children:W(i.original)})},{id:"mode",accessorFn:(i)=>i.mode,meta:{label:"Environment"},enableHiding:!1,size:120,minSize:100,maxSize:150,header:({column:i})=>e(K,{column:i,children:"Environment"}),cell:({row:i})=>e(J,{mode:i.original.mode})},{accessorKey:"lastUsedAt",meta:{label:"Last Used"},enableHiding:!1,size:130,minSize:110,maxSize:170,header:({column:i})=>e(K,{column:i,children:"Last Used"}),cell:({row:i})=>{let s=st(i.original.lastUsedAt);return e("span",{title:s.absolute,children:s.relative})}},{accessorKey:"createdAt",meta:{label:"Created"},enableHiding:!0,size:130,minSize:110,maxSize:170,header:({column:i})=>e(K,{column:i,children:"Created"}),cell:({row:i})=>{let s=st(i.original.createdAt);return e("span",{title:s.absolute,children:s.relative})}},{id:"actions",enableSorting:!1,enableHiding:!1,enableResizing:!1,size:56,minSize:52,maxSize:64,cell:({row:i})=>e("div",{className:"flex justify-end",children:e($a,{apiKey:i.original,onDelete:t,onRename:a})})}]}function Jt({apiAccess:t}){let{fetchWithAuth:a,postWithAuth:i}=z(),[s,r]=S.default.useState([]),[o,l]=S.default.useState(!0),[c,u]=S.default.useState(null),[g,b]=S.default.useState(!1),[p,T]=S.default.useState(""),[k,f]=S.default.useState("test"),[D,A]=S.default.useState(!1),[m,E]=S.default.useState(null),[B,x]=S.default.useState([{id:"createdAt",desc:!0}]),[M,L]=S.default.useState([]),[q,I]=S.default.useState(""),F=S.default.useCallback(async()=>
1{l(!0),u(null);let y=await a("/api/developers/apiKeys/list");if(y.error)u(y.error);else r(y.data?.keys??[]);l(!1)},[a]);S.default.useEffect(()=>{F()},[F]);let Z=S.default.useCallback(async()=>{if(!t){u("API access is inactive. Existing keys can still be viewed and deleted.");return}let y=p.trim();if(!y){u("Enter a name for the API key.");return}A(!0),u(null);let w=await i("/api/developers/apiKeys/create",{name:y,mode:k});if(A(!1),w.error){u(w.error);return}if(w.data)Ge.track("api_key_created",{source:"api_keys"}),E(w.data),b(!1),T(""),f("test"),await F()},[t,F,k,p,i]),Q=S.default.useCallback(()=>{T(""),f("test"),b(!0)},[]),H=S.default.useCallback(async(y)=>{let w=await i("/api/developers/apiKeys/remove",{keyId:y});if(w.error)throw P.error(w.error,{position:"top-center",duration:3000}),Error(w.error);P.success("API key deleted",{position:"top-center",duration:2000}),await F()},[F,i]),ee=S.default.useCallback(async(y,w)=>{let C=await i("/api/developers/apiKeys/update",{keyId:y,name:w});if(C.error)throw P.error(C.error,{position:"top-center",duration:3000}),Error(C.error);P.success("API key renamed",{position:"top-center",duration:2000}),await F()},[F,i]),_=S.default.useMemo(()=>Oa({onDelete:H,onRename:ee}),[H,ee]),te=S.default.useMemo(()=>({title:t?"No API keys yet":"API access is not enabled",description:t?"Create a sandbox key for testing or a live key for your production integration.":"Request access to create API keys for your integration.",icon:e(ie,{}),primaryAction:t?{label:"Create key",onClick:Q}:{label:"Request access",href:"https://revenite.ai/support",target:"_blank",rel:"noreferrer"}}),[t,Q]),U=Pe({data:s,columns:_,state:{sorting:B,columnFilters:M},onSortingChange:x,onColumnFiltersChange:L,getCoreRowModel:Ee(),getSortedRowModel:Fe(),getFilteredRowModel:we(),getPaginationRowModel:Ie()});return n("div",{className:"flex flex-col",children:[c?e("div",{className:"mb-4 rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-sm text-destructive",children:c}):null,n("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-2",children:[e(Me,{table:U,quickFilterText:q,onQuickFilterTextChange:I,placeholder:"Search keys..."}),t?n(v,{type:"button",size:"sm",onClick:Q,children:[e(Lt,{"data-icon":"inline-start"}),"Create Key"]}):s.length>0?e(v,{asChild:!0,size:"sm",children:e("a",{href:"https://revenite.ai/support",target:"_blank",rel:"noreferrer",children:"Request access"})}):null]}),e(Ke,{table:U,isLoading:o,noTruncateColumnIds:["mode","actions"],emptyState:te}),e(Le,{table:U}),e(Be,{open:g,onOpenChange:b,children:n(ze,{children:[n(He,{children:[e($e,{children:"Create API Key"}),e(Oe,{children:"Choose a sandbox key for testing or a live key for production traffic."})]}),n(dt,{children:[n(_e,{children:[e(Ue,{htmlFor:"api-key-mode",children:"Environment"}),n(Wt,{id:"api-key-mode",type:"single",variant:"outline",value:k,disabled:D||!t,"aria-label":"API key environment",onValueChange:(y)=>{if(y)f(y)},children:[e(lt,{value:"test",children:"Sandbox"}),e(lt,{value:"live",children:"Live"})]}),e(Ve,{children:k==="test"?"Sandbox data is isolated from live API results and does not count toward API usage.":"Live keys create production evaluations and count toward API usage."})]}),n(_e,{children:[e(Ue,{htmlFor:"api-key-name",children:"Name"}),e(re,{id:"api-key-name",value:p,maxLength:100,placeholder:k==="test"?"Development sandbox":"Production backend",disabled:D||!t,onChange:(y)=>{T(y.target.value)},onKeyDown:(y)=>{if(y.key==="Enter"&&t)y.preventDefault(),Z()}}),e(Ve,{children:"Use a name that identifies where this key is deployed."})]})]}),n(ct,{children:[e(v,{type:"button",variant:"outline",disabled:D,onClick:()=>{b(!1)},children:"Cancel"}),e(v,{type:"button",disabled:D||!t,onClick:()=>{Z()},children:"Create"})]})]})}),e(Be,{open:Boolean(m),onOpenChange:(y)=>{if(!y)E(null)},children:n(ze,{className:"sm:max-w-xl",children:[n(He,{children:[e($e,{children:"Copy API Key"}),e(Oe,{children:"This secret is shown once. It cannot be viewed again after you close this dialog."})]}),m?n("div",{className:"flex flex-col gap-3",children:[e(J,{mode:m.key.mode}),e(re,{readOnly:!0,value:m.secret,className:"font-mono text-xs"}),n("div",{className:"flex flex-wrap items-center gap-2",children:[e(Te,{value:m.secret,label:"Copy secret",copiedLabel:"Copied API key"}),e(v,{type:"button",variant:"outline",onClick:()=>{E(null)},children:"Done"})]})]}):null]})})]})}var le=j(Y(),1);function qe({children:t}){let{fetchWithAuth:a}=z(),[i,s]=le.default.useState(!0),[r,o]=le.default.useState(null),[l,c]=le.default.useState(null),u=le.default.useCallback(async()=>{s(!0),c(null);let g=await a("/api/developers/access");if(g.error)c(g.error),o(null);else o(g.data??null);s(!1)},[a]);if(le.default.useEffect(()=>{u()},[u]),i)return n("div",{className:"flex flex-col gap-3",children:[e(N,{className:"h-9 w-72"}),e(N,{className:"h-64 w-full"})]});if(l)return n(be,{children:[n(ye,{children:[e(he,{variant:"icon",children:e(ut,{})}),e(Se,{children:"Developers is unavailable"}),e(Ae,{children:l})]}),e(Ce,{children:e(v,{type:"button",variant:"outline",onClick:()=>{u()},children:"Retry"})})]});if(!r)return n(be,{children:[n(ye,{children:[e(he,{variant:"icon",children:e(ut,{})}),e(Se,{children:"Developers is unavailable"}),e(Ae,{children:"Unable to load Developers access state."})]}),e(Ce,{children:e(v,{type:"button",variant:"outline",onClick:()=>{u()},children:"Retry"})})]});if(typeof t==="function")return e(ve,{children:t(r)});return e(ve,{children:t})}var R=j(Y(),1);var xe=j(Y(),1);var _a=O("before:content-[counter(line)]","before:inline-block","before:[counter-increment:line]","before:w-8","before:mr-4","before:text-right","before:text-muted-foreground
1/50","before:font-mono","before:select-none");function Ua(t){return t===1||t===3||t===5||t===7}function Va(t){return t===2||t===3||t===6||t===7}function Ga(t){return t===4||t===5||t===6||t===7}function qa(t){return{bg:"transparent",fg:"inherit",tokens:t.split(`
2`).map((a)=>a===""?[]:[{color:"inherit",content:a,offset:0}])}}function Qa(t){return t.map((a,i)=>({key:`line-${i}`,tokens:a.map((s,r)=>({key:`line-${i}-${r}`,token:s}))}))}function Wa({token:t}){return e("span",{style:{backgroundColor:t.bgColor,color:t.color,fontStyle:Ua(t.fontStyle)?"italic":void 0,fontWeight:Va(t.fontStyle)?"bold":void 0,textDecoration:Ga(t.fontStyle)?"underline":void 0,...t.htmlStyle},children:t.content})}function Ja({line:t,showLineNumbers:a}){return e("span",{className:O("block min-h-5",a&&_a),children:t.tokens.map(({key:i,token:s})=>e(Wa,{token:s},i))})}function ja(t,a,i){let s=xe.default.useMemo(()=>qa(t),[t]),[r,o]=xe.default.useState(()=>Qe(t,a,{theme:i})??s);return xe.default.useEffect(()=>{let l=!1;return o(Qe(t,a,{theme:i})??s),Qe(t,a,{theme:i},(c)=>{if(!l)o(c)}),()=>{l=!0}},[t,a,s,i]),r}function ce({actions:t,className:a,code:i,copiedLabel:s="Copied code",copyLabel:r="Copy",footer:o,header:l,language:c,maxHeightClassName:u="max-h-96",preClassName:g,showCopy:b=!0,showHeader:p,showLineNumbers:T=!1,theme:k="github-dark",title:f,...D}){let A=ja(i,c,k),m=xe.default.useMemo(()=>Qa(A.tokens),[A.tokens]),E=[l,f,t].some((x)=>x!==void 0&&x!==null),B=p??(b?!0:E);return n("div",{className:O("overflow-hidden rounded-lg border bg-background shadow-xs",a),...D,children:[B?n("div",{className:"flex items-center justify-between gap-3 border-b bg-background/70 px-3 py-2",children:[e("div",{className:"min-w-0",children:l??e("span",{className:"block truncate text-sm font-medium",children:f})}),n("div",{className:"flex shrink-0 items-center gap-2",children:[t,b?e(Te,{value:i,label:r,copiedLabel:s,iconOnly:!0}):null]})]}):null,e("div",{className:O("overflow-auto bg-muted",u),children:e("pre",{className:O("m-0 p-4 text-xs leading-5",g),style:{backgroundColor:A.bg,color:A.fg},children:e("code",{className:O("block font-mono",T&&"[counter-increment:line_0] [counter-reset:line]"),children:m.map((x)=>e(Ja,{line:x,showLineNumbers:T},x.key))})})}),o?e("div",{className:"border-t px-4 py-3",children:o}):null]})}var Ya="Quick Start Sandbox",Xa="quick-start-demo";function Za(t){return t.endsWith("/")?t.slice(0,-1):t}function ei(){let t=typeof process.env.INTEGRATION_API_URL==="string"?process.env.INTEGRATION_API_URL.trim():"";if(t)return`${Za(t)}/v1`;return`${window.location.origin}/v1`}function ti(t){return JSON.stringify(t,null,2)}function ai(t,a){let i=a?`,
3    "themeId": "${a}"`:"";return`curl -X POST "${t}/evaluations" \\
4  -H "Authorization: Bearer $REVENITE_API_KEY" \\
5  -H "Content-Type: application/json" \\
6  -d '{
7    "assessments": [
8      {
9        "assessmentId": "shoulderAbduction",
10        "side": "both"
11      }
12    ],
13    "externalId": "${Xa}"${i}
14  }'`}function ii(t,a){return`curl "${t}/evaluations/${a??"eval_..."}" \\
15  -H "Authorization: Bearer $REVENITE_API_KEY"`}function mt({children:t,done:a,locked:i}){return n("section",{className:`relative transition-opacity ${i?"opacity-50":""}`,children:[e("div",{className:"absolute -left-11 bottom-0 top-0 hidden w-px bg-border md:block"}),e("div",{className:`absolute -left-12.5 top-1.5 hidden size-3.5 items-center justify-center rounded-full border bg-background md:flex ${a?"border-primary bg-primary text-primary-foreground":"border-border bg-background"}`,children:a?e(Yt,{className:"size-2.5"}):null}),e("div",{className:"flex flex-col gap-4",children:t})]})}function pt({actions:t,description:a,title:i}){return n("div",{className:"flex flex-col gap-3",children:[n("div",{children:[e("h3",{className:"text-base font-semibold",children:i}),e("p",{className:"mt-1 text-sm text-muted-foreground",children:a})]}),t?e("div",{className:"flex flex-wrap gap-2",children:t}):null]})}function jt({activeTab:t,curl:a,footer:i,onActiveTabChange:s,response:r}){let o=r?ti(r):null,l=o?t:"curl";return e(ce,{code:l==="response"&&o?o:a,language:l==="response"?"json":"bash",title:"cURL",header:o?e(We,{value:l,onValueChange:(u)=>{s(u)},className:"gap-0",children:n(Je,{variant:"line",className:"h-7 gap-4 p-0",children:[e(X,{value:"curl",className:"h-7 px-0 text-sm",children:"cURL"}),e(X,{value:"response",className:"h-7 px-0 text-sm",children:"Response"})]})}):void 0,copyLabel:l==="response"?"Copy response":"Copy cURL",copiedLabel:l==="response"?"Response copied":"cURL copied",footer
15:i,maxHeightClassName:"max-h-90",theme:"github-light-high-contrast"})}function ra({apiAccess:t}){let{fetchWithAuth:a,postWithAuth:i}=z(),[s,r]=R.default.useState(null),[o,l]=R.default.useState(null),[c,u]=R.default.useState(null),[g,b]=R.default.useState(null),[p,T]=R.default.useState(!1),[k,f]=R.default.useState(!1),[D,A]=R.default.useState(!1),[m,E]=R.default.useState(!1),[B,x]=R.default.useState("curl"),[M,L]=R.default.useState("curl"),[q,I]=R.default.useState(null),{selectedThemeId:F,isThemeSelectionBlocked:Z,pickerProps:Q}=ia(),H=R.default.useMemo(ei,[]),ee=R.default.useMemo(()=>ai(H,F??null),[H,F]),_=R.default.useMemo(()=>ii(H,c?.id??null),[c?.id,H]),te=R.default.useCallback(async()=>{if(!t){I("API access is inactive. Quick Start actions are disabled.");return}T(!0),I(null);let C=await i("/api/developers/apiKeys/create",{name:Ya,mode:"test"});if(T(!1),C.error){I(C.error);return}if(C.data)Ge.track("api_key_created",{source:"api_quickstart"}),r(C.data.secret),l(C.data.key.id),u(null),b(null),x("curl"),L("curl"),E(!1),P.success("Quick Start sandbox key created",{position:"top-center",duration:2000})},[t,i]),U=R.default.useCallback(async()=>{if(!t){I("API access is inactive. Quick Start actions are disabled.");return}if(!o){I("Create a Quick Start API key first.");return}f(!0),I(null);let C=await i("/api/developers/quickStart",{apiKeyId:o,themeId:F??null});if(f(!1),C.error){I(C.error);return}if(C.data)u(C.data),b(null),x("response"),L("curl"),P.success("Demo evaluation created",{position:"top-center",duration:2000})},[t,o,i,F]),y=R.default.useCallback(async()=>{if(!t){I("API access is inactive. Quick Start actions are disabled.");return}if(!c){I("Create a demo evaluation first.");return}A(!0),I(null);let C=await a(`/api/developers/apiEvals/fetch?apiEvalId=${encodeURIComponent(c.id)}`);if(A(!1),C.error){I(C.error);return}if(C.data)b(C.data.evaluation),L("response"),P.success("Results refreshed",{position:"top-center",duration:2000})},[t,c,a]),w=R.default.useCallback(async()=>{if(!s)return;try{await navigator.clipboard.writeText(s),P.success("API key copied",{position:"top-center",duration:2000})}catch{P.error("Failed to copy",{position:"top-center",duration:2000})}},[s]);return n("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-5",children:[n("div",{children:[e("h2",{className:"text-xl font-semibold",children:"Quick Start"}),e("p",{className:"mt-1 max-w-3xl text-sm text-muted-foreground",children:"Create a sandbox key, launch a test evaluation, then fetch the isolated API result payload. Production integrations should call the Integration API from your backend."})]}),q?e("div",{className:"rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-sm text-destructive",children:q}):null,!t?n(na,{variant:"warning",children:[e(ft,{className:"size-4"}),e(sa,{children:"API access is inactive"}),e(oa,{children:"Quick Start examples remain visible, but demo actions are disabled."})]}):null,n("div",{className:"relative flex flex-col gap-10 md:pl-14",children:[n(mt,{done:Boolean(s),locked:!1,children:[e(pt,{title:"Add an API key",description:"Use the following sandbox key to authenticate test requests. Sandbox data stays separate from live results.",actions:s?void 0:n(v,{type:"button",size:"sm",onClick:()=>{te()},disabled:!t||p,children:[e(ie,{"data-icon":"inline-start"}),p?"Creating...":"Create Sandbox Key"]})}),s?n("div",{className:"relative",children:[e(re,{readOnly:!0,className:`pr-18 font-mono text-xs ${m?"":"[-webkit-text-security:disc]"}`,value:s,"aria-label":"Quick Start API key secret"}),n("div",{className:"absolute right-2 top-1/2 flex -translate-y-1/2 items-center gap-1.5",children:[e(v,{type:"button",variant:"ghost",size:"icon-sm","aria-label":m?"Hide API key secret":"Show API key secret",title:m?"Hide API key secret":"Show API key secret",onClick:()=>{E((C)=>!C)},children:m?e(Xt,{}):e(Zt,{})}),e(v,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"Copy API key",title:"Copy API key",onClick:()=>{w()},children:e(Re,{})})]})]}):null]}),n(mt,{done:Boolean(c),locked:!o,children:[e(pt,{title:"Create evaluation",description:"Implement or run the code below to create your first evaluation."}),e(aa,{...Q}),e(jt,{activeTab:B,curl:ee,onActiveTabChange:x,response:c,footer:c?t?e(v,{type:"button",size:"sm",asChild:!0,children:n("a",{href:c.url,target:"_blank",rel:"noreferrer",children:[e(gt,{"data-icon":"inl
15ine-start"}),"Open Evaluation"]})}):n(v,{type:"button",size:"sm",disabled:!0,children:[e(gt,{"data-icon":"inline-start"}),"Open Evaluation"]}):n(v,{type:"button",size:"sm",onClick:()=>{U()},disabled:!t||!o||k||Z,children:[e(ea,{"data-icon":"inline-start"}),k?"Creating...":"Create Eval"]})})]}),n(mt,{done:g?.status==="completed",locked:!c,children:[e(pt,{title:"Fetch results",description:"Implement or run the code below to fetch the results for the evaluation."}),g&&g.status!=="completed"?n("div",{className:"flex items-start gap-2 rounded-md border border-warning/30 bg-warning/5 px-3 py-2 text-sm text-warning",children:[e(ft,{className:"mt-0.5 size-4 shrink-0"}),e("p",{children:"Evaluation still pending. To see full results, please complete the evaluation and then refetch."})]}):null,e(jt,{activeTab:M,curl:_,onActiveTabChange:L,response:g,footer:n(v,{type:"button",size:"sm",onClick:()=>{y()},disabled:!t||!c||D||g?.status==="completed",children:[e(ta,{"data-icon":"inline-start"}),D?"Fetching...":g?"Refetch Results":"Fetch Results"]})})]})]})]})}var G=j(Y(),1);function la(t){return t==="left"?"Left side":"Right side"}function je(t,a,i,s,r){let{api:o,record:l,originalRecord:c}=t;return{label:e("div",{className:"font-medium text-foreground",children:a}),emptyText:i,apiEvalId:r,clientId:o.clientId??void 0,record:l,originalRecord:c,evaluationId:o.evaluationId,assessmentDocId:o.id,assessmentId:o.assessmentId,videoClips:o.videoClips,side:s?.side,meta:s?.meta}}function ni(t,a){let i=t.record;if(i.isSided())return[je(t,la("left"),"Left side not captured.",{side:"left"},a),je(t,la("right"),"Right side not captured.",{side:"right"},a)];let s=i.getTwinVariants();if(s.some((o)=>(o.side??o.meta)!==void 0))return s.map((o)=>je(t,o.label,`${o.label} not captured.`,{side:o.side,meta:o.meta},a));return[je(t,t.api.name,"Image not captured.",void 0,a)]}function si(t){let a=vt(t.api.extra.averageROM),i=t.api.extra.asymmetry,s=i.value===null&&i.percent===null?"-":`${vt(i.value)} (${pa(i.percent)})`,r=t.api.normative,o=`${r.min}° - ${r.max}°`;return e(ba,{title:"Stats",description:"Normative reference, average ROM, and asymmetry stats",columns:["Unit","Value"],rows:[["Normative range",o],["Average",a],["Asymmetry",s]]})}function oi(t){let{api:a,record:i}=t,s=i.fiveRepTime,r=i.thirtySecReps,o=typeof s==="number"&&Number.isFinite(s),l=typeof r==="number"&&Number.isFinite(r),c=Boolean(a.videoClips?.fiveRep),u=Boolean(a.videoClips?.thirtySec),g=a.normative.fiveRepNorms,b=a.normative.thirtySecNorms;return n("div",{className:"space-y-6",children:[o?n("div",{className:"space-y-3",children:[!c?e(At,{title:`Result: ${bt(s)}`,description:`Participant completed 5 sit to stand repetitions in ${bt(s)}.`}):null,e(St,{title:"5-Rep norms",description:`Reference: ${yt(g.citations)}`,descriptionTitle:ht(g.citations),columns:["Age","Time"],rows:g.normativeData.map((p)=>[`${p.minAge}-${p.maxAge}`,`${p.timeNorm.toFixed(1)} s`])})]}):null,l?n("div",{className:"space-y-3",children:[!u?e(At,{title:`Result: ${Ye(r)}`,description:`Participant completed ${Ye(r)} in 30 seconds.`}):null,e(St,{title:"30-Sec norms",description:`Reference: ${yt(b.citations)}`,descriptionTitle:ht(b.citations),columns:["Age","Male","Female"],rows:b.normativeData.map((p)=>[`${p.minAge}-${p.maxAge}`,`${p.maleNorm}`,`${p.femaleNorm}`])})]}):null]})}function ri(t,a){if(a.captureKey==="fiveRep"&&typeof t.record.fiveRepTime==="number"&&Number.isFinite(t.record.fiveRepTime))return`${a.label} Test: Completed in ${t.record.fiveRepTime.toFixed(1)} seconds`;if(a.captureKey==="thirtySec"&&typeof t.record.thirtySecReps==="number"&&Number.isFinite(t.record.thirtySecReps))return`${a.label} Test: ${Ye(t.record.thirtySecReps)} completed`;return a.label}function li(t){switch(t.type){case"rom":return si(t);case"squat":case"ohsquat":case"slsquat":case"lunge":return e(ya,{assessment:t});case"posture":return e(va,{assessment:t});case"balance":return e(fa,{assessment:t});case"jump":return e(ga,{assessment:t});case"sts":return oi(t);default:return null}}function ci(t,a){switch(t.type){case"sts":return e(Ct,{assessment:t,formatLabel:(i)=>ri(t,i)});case"balance":case"jump":return e(Ct,{assessment:t});default:return e(ha,{images:ni(t,a),enableTwin3d:!0,enablePoseEditing:!1})}}function di({value:t}){return e(ce,{code:JSON.stringify(t,null,2),language:"json",title:"Assessment JSON",theme:"github-light-high-contrast",copyLabel:"Copy",copiedLabel:"Copied JSON",maxHeightClassName:"max-h-96"})}function Sa({assessments:t,apiEvalId:a,apiPayloadResults:i}){if(t.length===0)return null;let s=new Map(i?.map((r)=>[r.assessmentId,r])??[]);return e("div",{className:"overflow-hidden rounded-lg border bg-background",children:t.map((r)=>{let o=li(r),l=s.get(r.api.assessmentId)??r.api,c=r.type==="sts";return n(da,{className:"border-t first:border-t-0",children:[n(ua,{className:"group flex w-full items-center justify-between gap-4 px-4 py-3 text-left text-sm font-medium text-foreground transition-colors hover:bg-muted/50 data-[state=open]:bg-muted/50",children:[e("span",{className:"min-w-0 truncate",children:r.api.name}),e(ca,{className:"size-4 shrink-0 text-muted-foreground transition-transform group-data-[state=open]:rotate-90"})]}),e(ma,{className:"border-t bg-background px-4 py-4",children:n("div",{className:"flex flex-col gap-4",children:[ci(r,a),n("div",{className:O("grid gap-4",c?"xl:grid-cols-[minmax(0,0.9fr)_minmax(0,1.1fr)]":"xl:grid-cols-2"),children:[o,e(di,{value:l})]})]})})]},r.api.id)})})}function ui(){return n("div",{className:"flex flex-col gap-5",children:[n("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[e(N,{className:"h-7 w-72"}),e(N,{className:"h-6 w-24 rounded-full"})]}
15),n("div",{className:"grid gap-4 rounded-lg border p-4 md:grid-cols-2 xl:grid-cols-4",children:[e(N,{className:"h-10 w-full"}),e(N,{className:"h-10 w-full"}),e(N,{className:"h-10 w-full"}),e(N,{className:"h-10 w-full"})]}),n("div",{className:"overflow-hidden rounded-lg border bg-muted",children:[n("div",{className:"flex items-center justify-between border-b bg-background/70 px-3 py-2",children:[e(N,{className:"h-5 w-20"}),e(N,{className:"h-8 w-20"})]}),n("div",{className:"flex flex-col gap-2 p-4",children:[e(N,{className:"h-4 w-3/5"}),e(N,{className:"h-4 w-4/5"}),e(N,{className:"h-4 w-2/3"}),e(N,{className:"h-4 w-5/6"}),e(N,{className:"h-4 w-1/2"}),e(N,{className:"h-4 w-3/4"})]})]})]})}function mi({message:t,onBack:a}){return n(be,{children:[n(ye,{children:[e(he,{variant:"icon",children:e(Ca,{})}),e(Se,{children:"API evaluation unavailable"}),e(Ae,{children:t})]}),e(Ce,{children:e(v,{type:"button",variant:"outline",onClick:a,children:"Back to inspector"})})]})}function Xe({label:t,value:a}){return n("div",{className:"min-w-0",children:[e("div",{className:"text-xs font-medium text-muted-foreground",children:t}),e("div",{className:"mt-1 truncate text-sm",title:typeof a==="string"?a:void 0,children:a})]})}function pi(){let{apiEvalId:t}=Aa(),a=Ne(),{fetchWithAuth:i}=z(),[s,r]=G.default.useState(null),[o,l]=G.default.useState(null),[c,u]=G.default.useState(null),[g,b]=G.default.useState(!0),[p,T]=G.default.useState(null),k=G.default.useCallback(()=>{a("/developers?tab=inspector")},[a]);if(G.default.useEffect(()=>{if(!t){T("API evaluation ID is missing."),b(!1);return}(async()=>{b(!0),T(null),u(null),l(null);let x=await i(`/api/developers/apiEvals/fetch?apiEvalId=${encodeURIComponent(t)}`);if(x.error)T(x.error),r(null);else if(r(x.data??null),x.data?.evaluation.status==="completed"){let M=await i(`/api/developers/apiEvals/results?apiEvalId=${encodeURIComponent(t)}`);if(M.error)u(M.error);else if(M.data)l(xa(M.data))}b(!1)})()},[t,i]),g)return e(ui,{});if(p||!s)return e(mi,{message:p??"API evaluation not found.",onBack:k});let{evaluation:f,apiKey:D}=s,A=ne(f.createdAt),m=ne(f.completedAt),E=Nt(f.expiresAt),B=JSON.stringify(f,null,2);return n("div",{className:"flex flex-col gap-5",children:[e("div",{className:"flex flex-col gap-3 md:flex-row md:items-start md:justify-between",children:n("div",{className:"min-w-0",children:[n("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[e("h1",{className:"truncate text-xl font-semibold",children:f.id}),e(De,{status:f.status}),e(J,{mode:f.mode})]}),f.externalId?e("p",{className:"mt-1 truncate font-mono text-xs text-muted-foreground",title:f.externalId,children:f.externalId}):null]})}),n("div",{className:"grid gap-4 rounded-lg border p-4 md:grid-cols-2 xl:grid-cols-4",children:[e(Xe,{label:"Created",value:e("span",{title:A.absolute,children:A.relative})}),e(Xe,{label:"Completed",value:e("span",{title:m.absolute,children:m.relative})}),e(Xe,{label:"Expires",value:e("span",{title:E.absolute,children:E.relative})}),e(Xe,{label:"API Key",value:D?e("span",{className:"inline-flex min-w-0 items-center",children:e("span",{className:"truncate",children:D.name})}):e(Et,{})})]}),o?e(Sa,{assessments:o.assessments,apiEvalId:f.id,apiPayloadResults:f.results}):c?e("div",{className:"rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-sm text-destructive",children:c}):null,e(ce,{code:B,language:"json",title:"Response",theme:"github-light-high-contrast",copyLabel:"Copy",copiedLabel:"Copied JSON",maxHeightClassName:"max-h-[60vh]"})]})}function fi(){return e("div",{className:"@container/main flex flex-1 flex-col gap-2",children:e("div",{className:"flex flex-col gap-4 px-4 py-4 md:gap-6 lg:px-6",children:e(qe,{children:e(pi,{})})})})}function ka(t){if(t==="inspector"||t==="quick-start")return t;return"api-keys"}var _n=()=>{let[t,a]=Ra(),i=ka(t.get("tab")),[s,r]=et.default.useState(i);et.default.useEffect(()=>{r(i)},[i]);let o=et.default.useCallback((l)=>{let c=ka(l);r(c),a(c==="api-keys"?{}:{tab:c})},[a]);return e("div",{className:"@container/main flex flex-1 flex-col gap-2",children:e("div",{className:"flex flex-col gap-4 py-4 md:gap-6",children:e("div",{className:"relative px-4 lg:px-6",children:e(qe,{children:(l)=>n(We,{value:s,onValueChange:o,children:[n(Je,{variant:"line",className:"mb-4",children:[e(X,{value:"api-keys",children:"API Keys"}),e(X,{value:"inspector",children:"Inspector"}
15),e(X,{value:"quick-start",children:"Quick Start"})]}),e(Ze,{value:"api-keys",children:e(Jt,{apiAccess:l.apiAccess})}),e(Ze,{value:"inspector",children:e(It,{})}),e(Ze,{value:"quick-start",children:e(ra,{apiAccess:l.apiAccess})})]})})})})})};export{_n as Developers,fi as DevelopersApiEvalDetail};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.