@motiadev/plugin-endpoint 0.13.0-beta.162-158257 → 0.13.0-beta.162-945354
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/dist/index.js +737 -2047
- package/dist/index.js.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/package.json +4 -6
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["cn","Input","Search","X","EndpointsSearchProps","value","onChange","onClear","EndpointsSearch","t0","$","_c","t1","Symbol","for","t2","e","target","t3","t4","t5","t6","visible","invisible","t7","t8","cn","React","memo","ApiRouteMethod","getMethodStyles","method","toUpperCase","BadgeProps","HTMLAttributes","HTMLDivElement","variant","EndpointBadge","t0","$","_c","className","props","t1","methodClasses","t2","FC","useMemo","ApiRouteMethod","EndpointBadge","EndpointPathProps","method","path","PathSeparator","$","_c","t0","Symbol","for","EndpointPath","t1","parts","split","filter","Boolean","partsLength","length","t2","part","index","isLast","key","separator","undefined","startsWith","flatMap","pathView","t3","t4","t5","t6","cn","FC","ApiEndpoint","EndpointPath","EndpointItemProps","endpoint","isSelected","isLast","onSelect","id","EndpointItem","t0","$","_c","t1","method","path","t2","t3","t4","t5","t6","t7","description","t8","t9","cn","ChevronDown","FC","ApiEndpoint","EndpointItem","FlowGroupProps","flow","endpoints","isOpen","isSelected","onToggle","onClearSelection","selectedEndpointId","onSelectEndpoint","id","FlowGroup","t0","$","_c","t1","t2","t3","t4","t5","t6","hidden","t7","Symbol","for","t8","t9","t10","t11","t12","t13","t14","t15","length","endpoint","index","map","t16","create","createJSONStorage","devtools","persist","ConfigurationLitItem","name","value","active","Headers","key","Params","defaultHeaders","CONTENT_TYPE","USER_AGENT","ACCEPT","ResponseData","headers","Record","body","statusCode","executionTime","Actions","setResponse","response","Response","startTime","setHeaders","removeHeaders","setBody","setSelectedEndpointId","selectedEndpointId","setQueryParams","params","removeQueryParams","setPathParams","pathParams","removePathParams","setBodyIsValid","bodyIsValid","toggleFlowGroupStatus","flow","State","queryParams","flowGroupStatus","UseEndpointConfiguration","getHeadersSelector","state","getBodyIsValidSelector","getBodySelector","getResponseSelector","undefined","getQueryParamsSelector","getPathParamsSelector","useEndpointConfiguration","set","newQueryParams","newPathParams","contentType","get","includes","text","json","blob","toJSON","error","console","Date","now","status","Object","fromEntries","entries","currentHeaders","newHeaders","storage","localStorage","useStreamGroup","useMemo","ApiEndpoint","useGetEndpoints","$","_c","t0","Symbol","for","streamName","groupId","data","endpoints","t1","reduce","_temp","Record","groupedEndpoints","t2","acc","endpoint","flows","length","forEach","flow","push","usePathParams","path","pathParams","match","map","param","slice","resolveRef","ref","rootSchema","Record","startsWith","undefined","defName","replace","$defs","convertSchemaToJson","schema","effectiveRootSchema","$ref","resolvedSchema","anyOf","Array","isArray","nonNullSchema","find","item","type","result","properties","Object","entries","forEach","key","value","items","enum","description","useEffect","useState","convertSchemaToJson","useJsonSchemaToJson","schema","$","_c","body","setBody","t0","t1","JSON","stringify","t2","Panel","FC","ReactJson","ApiEndpoint","Props","endpoint","value","panelName","EndpointBodyPanel","t0","$","_c","shouldHaveBody","includes","method","toLowerCase","t1","t2","JSON","parse","t3","Symbol","for","backgroundColor","t4","t5","Panel","FC","usePathParams","ApiEndpoint","Props","endpoint","EndpointPathParamsPanel","t0","$","_c","pathParams","path","length","t1","Symbol","for","gridTemplateColumns","t2","map","_temp","t3","param","Panel","FC","Fragment","ApiEndpoint","Props","endpoint","EndpointQueryParamsPanel","t0","$","_c","queryParams","length","t1","Symbol","for","gridTemplateColumns","gridTemplateRows","t2","map","_temp","t3","param","name","description","Tabs","TabsContent","TabsList","TabsTrigger","useThemeStore","FC","useMemo","ReactJson","convertSchemaToJson","EndpointResponseItem","responseCode","bodySchema","Record","EndpointResponseProps","items","EndpointResponseSchemaItem","t0","$","_c","theme","_temp","t1","schema","description","t2","backgroundColor","t3","EndpointResponseSchema","length","map","_temp2","t4","_temp3","t5","store","item","props","Sidebar","X","FC","EndpointPath","useJsonSchemaToJson","ApiEndpoint","EndpointBodyPanel","EndpointPathParamsPanel","EndpointQueryParamsPanel","EndpointResponseSchema","Props","endpoint","onClose","SpecSidePanel","t0","$","_c","body","bodySchema","t1","method","path","t2","t3","icon","onClick","t4","t5","t6","t7","responseSchema","Object","entries","map","_temp","t8","description","status","schema","responseCode","Editor","useMonaco","useThemeStore","FC","useEffect","useLayoutEffect","useMemo","useRef","useState","JsonEditorProps","value","schema","Record","onChange","onValidate","isValid","language","readOnly","JsonEditor","t0","$","_c","t1","t2","undefined","monaco","theme","_temp","editorTheme","editor","setEditor","resizeAnimationFrameRef","isValidatingRef","t3","t4","defineTheme","base","inherit","rules","colors","focusBorder","t5","t6","languages","typescript","javascriptDefaults","setCompilerOptions","isolatedModules","json","jsonDefaults","setDiagnosticsOptions","schemas","uri","window","location","href","fileMatch","t7","t8","setTheme","t10","t9","container","getContainerDomNode","parentElement","handleResize","current","cancelAnimationFrame","requestAnimationFrame","width","height","getBoundingClientRect","layout","resizeObserver","ResizeObserver","observe","disconnect","t11","t12","model","getModel","isEmptyWithSchema","timeoutId","setTimeout","markers","getModelMarkers","resource","length","clearTimeout","t13","JSON","stringify","editorKey","t14","value_0","t15","markers_0","isEmptyWithSchema_0","t16","Symbol","for","enabled","t17","automaticLayout","scrollBeyondLastLine","minimap","overviewRulerLanes","t18","state","CircleX","FC","memo","useCallback","useEffect","useRef","useShallow","JsonEditor","getBodyIsValidSelector","getBodySelector","useEndpointConfiguration","convertSchemaToJson","SidePanelBodyTabProps","schema","Record","SidePanelBodyTab","t0","$","_c","setBody","setBodyIsValid","bodyIsValid","body","previousSchemaRef","userClearedRef","t1","t2","schemaChanged","current","JSON","stringify","t3","value","isEmptyWithSchema","handleBodyChange","t4","t5","t6","Button","Checkbox","cn","Input","AlertCircle","Check","Trash2","FC","memo","useCallback","useRef","useState","ConfigurationLitItem","ConfigurationListItemProps","value","id","onUpdate","key","field","onRemove","required","ConfigurationListItem","t0","$","_c","t1","undefined","activeConfiguration","setActiveConfiguration","valueToDelete","setValueToDelete","deleteTimeout","isActive","t2","Symbol","for","clearTimeout","current","setTimeout","onDelete","t3","onMouseOver","t4","onMouseLeave","t5","t6","t7","checked","t8","t9","active","t10","t11","t12","t13","e","target","t14","name","t15","t16","t17","e_0","t18","t19","t20","t21","t22","t23","t24","t25","t26","Button","Plus","useCallback","useShallow","ConfigurationListItem","getHeadersSelector","useEndpointConfiguration","SidePanelHeadersTab","setHeaders","removeHeaders","headers","addHeader","newHeader","name","value","active","Date","getTime","toString","updateHeader","key","field","Object","entries","map","header","length","useMemo","useShallow","getPathParamsSelector","getQueryParamsSelector","UseEndpointConfiguration","useEndpointConfiguration","queryParamsSelector","state","Object","values","filter","param","active","value","name","usePathUrl","path","$","_c","pathParams","queryParams","t0","Symbol","for","t1","match","p1","url","replace","t2","length","map","_temp","join","Button","cn","Check","Copy","FC","useState","usePathUrl","EndpointPathPreviewProps","path","baseUrl","EndpointPathPreview","t0","$","_c","t1","undefined","window","location","origin","pathUrl","fullUrl","copied","setCopied","t2","navigator","clipboard","writeText","setTimeout","t3","err","console","error","handleCopy","Symbol","for","t4","t5","t6","t7","t8","t9","Button","Plus","useCallback","useMemo","useShallow","ConfigurationListItem","EndpointPathPreview","getPathParamsSelector","getQueryParamsSelector","useEndpointConfiguration","SidePanelParamsTabProps","path","SidePanelParamsTab","setQueryParams","removeQueryParams","setPathParams","queryParams","pathParams","pathParamsConfig","params","match","map","param","name","slice","value","active","addParam","newParam","Date","getTime","toString","updateParam","key","field","updatePathParam","length","pathName","Object","entries","useStreamItem","useStateStream","object","$","_c","t0","__motia","rest","data","originalData","Array","isArray","t1","isStreamed","JSON","stringify","t2","t3","statusMessages","Record","getStatusMessage","statusCode","cn","FC","getStatusMessage","ResponseCodeProps","statusCode","ResponseCode","t0","$","_c","t1","statusMessage","isSuccess","isWarning","isError","t2","t3","t4","t5","t6","t7","Button","useThemeStore","Download","React","Prism","SyntaxHighlighter","atomDark","oneLight","CodeDisplayProps","code","blob","Blob","contentType","codeTagProps","style","fontFamily","fontSize","customStyle","margin","borderRadius","padding","useLanguage","includes","ResponseContent","FC","t0","$","_c","theme","_temp","themeStyle","language","t1","url","URL","createObjectURL","window","open","onDownload","t2","t3","t4","state","Button","Tabs","TabsContent","TabsList","TabsTrigger","X","memo","useState","getResponseSelector","useEndpointConfiguration","useStateStream","ResponseCode","ResponseContent","ActiveTab","SidePanelResponse","$","_c","setResponse","response","data","body","Blob","undefined","activeTab","setActiveTab","t0","onClose","t1","Symbol","for","value","t2","t3","t4","t5","statusCode","t6","executionTime","t7","t8","t9","headers","t10","t11","Object","entries","map","_temp","t12","t13","key","value_0","Button","Loader2","memo","useState","useShallow","getBodySelector","getHeadersSelector","useEndpointConfiguration","usePathUrl","TriggerButtonProps","method","path","TriggerButton","setResponse","headers","body","pathUrl","isLoading","setIsLoading","onClick","_headers","Object","values","filter","header","active","name","value","reduce","acc","toLowerCase","Record","startTime","Date","now","response","fetch","includes","error","console","BackgroundEffect","Badge","Button","cn","Tabs","TabsContent","TabsList","TabsTrigger","Book","X","FC","memo","useState","useShallow","EndpointPath","getHeadersSelector","getQueryParamsSelector","getResponseSelector","UseEndpointConfiguration","useEndpointConfiguration","usePathParams","SpecSidePanel","ApiEndpoint","SidePanelBodyTab","SidePanelHeadersTab","SidePanelParamsTab","SidePanelResponse","TriggerButton","EndpointSidePanelProps","endpoint","onClose","ActiveTab","headersCountSelector","state","Object","keys","length","hasResponseSelector","undefined","paramsCountSelector","SidePanel","t0","$","_c","isGetOrDelete","method","activeTab","setActiveTab","isSpecOpen","setIsSpecOpen","headersCount","hasResponse","pathParamsCount","path","queryParamsCount","paramsCount","t1","Symbol","for","t2","t3","description","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","value","t14","t15","t16","t17","t18","t19","toString","t20","t21","t22","t23","bodySchema","t24","t25","t26","t27","t28","t29","cn","useCallback","useMemo","useState","EndpointsSearch","FlowGroup","useEndpointConfiguration","useGetEndpoints","SidePanel","ApiEndpoint","EndpointsPage","$","_c","endpoints","groupedEndpoints","selectedEndpointId","setSelectedEndpointId","toggleFlowGroupStatus","flowGroupStatus","t0","t1","endpoint","id","find","selectedEndpoint","onClose","search","setSearch","t2","Object","entries","filter","t3","endpoints_0","some","endpoint_0","method","toLowerCase","includes","path","filteredEndpoints","t4","t5","Symbol","for","t6","t7","map","t8","flow","endpoints_1","isSelected","endpoint_1","isOpen","t9","t10"],"sources":["../src/components/endpoints-search.tsx","../src/components/endpoint-badge.tsx","../src/components/endpoint-path.tsx","../src/components/endpoint-item.tsx","../src/components/flow-group.tsx","../src/hooks/use-endpoint-configuration.ts","../src/hooks/use-get-endpoints.ts","../src/hooks/use-path-params.ts","../src/hooks/utils.ts","../src/hooks/use-json-schema-to-json.tsx","../src/spec/spec-body-panel.tsx","../src/spec/spec-path-params-panel.tsx","../src/spec/spec-query-params-panel.tsx","../src/spec/spec-response-schema.tsx","../src/spec/spec-side-panel.tsx","../src/components/json-editor.tsx","../src/play/side-panel-body-tab.tsx","../src/components/configuration-list-item.tsx","../src/play/side-panel-headers-tab.tsx","../src/hooks/use-path-url.ts","../src/components/endpoint-path-preview.tsx","../src/play/side-panel-params-tab.tsx","../src/hooks/use-state-stream.ts","../src/play/reponse-code/utils.ts","../src/play/response-code.tsx","../src/play/response-content.tsx","../src/play/side-panel-response.tsx","../src/play/trigger-button.tsx","../src/play/side-panel.tsx","../src/endpoints-page.tsx"],"sourcesContent":["import { cn, Input } from '@motiadev/ui'\nimport { Search, X } from 'lucide-react'\n\ntype EndpointsSearchProps = {\n value: string\n onChange: (value: string) => void\n onClear: () => void\n}\n\nexport const EndpointsSearch = ({ value, onChange, onClear }: EndpointsSearchProps) => {\n return (\n <div className=\"p-2 border-b gap-4\" data-testid=\"endpoints-search-container\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50\" />\n <Input\n variant=\"shade\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"px-9! font-medium\"\n placeholder=\"Search by Method or Path\"\n />\n <X\n className={cn(\n 'cursor-pointer absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50 hover:text-muted-foreground',\n {\n visible: value !== '',\n invisible: value === '',\n },\n )}\n onClick={onClear}\n />\n </div>\n </div>\n )\n}\n","import { cn } from '@motiadev/ui'\nimport type * as React from 'react'\nimport { memo } from 'react'\nimport type { ApiRouteMethod } from '../types/endpoint'\n\nconst getMethodStyles = (method: ApiRouteMethod): string => {\n switch (method.toUpperCase()) {\n case 'POST':\n return 'bg-[#258DC3]/15 text-[#258DC3]'\n case 'GET':\n return 'bg-[#709A2D]/15 text-[#709A2D]'\n case 'DELETE':\n return 'bg-[#DE2134]/15 text-[#DE2134]'\n case 'PUT':\n return 'bg-[#B9922D]/15 text-[#B9922D]'\n case 'PATCH':\n return 'bg-[#B9922D]/15 text-[#B9922D]'\n case 'HEAD':\n return 'bg-[#E221DF]/15 text-[#E221DF]'\n case 'OPTIONS':\n return 'bg-[#B9922D]/15 text-[#B9922D]'\n default:\n return 'bg-[#258DC3]/15 text-[#258DC3]' // default to GET\n }\n}\n\ninterface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n variant: ApiRouteMethod\n}\n\nexport const EndpointBadge = memo(({ className, variant, ...props }: BadgeProps) => {\n const baseClasses = 'rounded-lg px-2 py-0.5 text-xs font-mono font-bold transition-colors'\n const methodClasses = getMethodStyles(variant)\n\n return <div className={cn(baseClasses, methodClasses, className)} {...props} />\n})\n","import { type FC, useMemo } from 'react'\nimport type { ApiRouteMethod } from '../types/endpoint'\nimport { EndpointBadge } from './endpoint-badge'\n\ninterface EndpointPathProps {\n method: string\n path: string\n}\n\nconst PathSeparator = () => {\n return <div className=\"text-muted-foreground\">/</div>\n}\n\nexport const EndpointPath: FC<EndpointPathProps> = ({ method, path }) => {\n const pathView = useMemo(() => {\n const parts = path.split('/').filter(Boolean)\n const partsLength = parts.length - 1\n return parts.flatMap((part, index) => {\n const isLast = index === partsLength\n const key = `part-${part}-${index}`\n const separator = isLast ? undefined : <PathSeparator key={`separator-${key}`} />\n\n if (part.startsWith(':')) {\n return [\n <div\n key={key}\n className=\"bg-[#2862FE]/20 text-[#2862FE] rounded-sm px-1 py-0.5 text-sm font-mono font-bold font-medium\"\n >\n {part}\n </div>,\n separator,\n ]\n }\n return [<div key={key}>{part}</div>, separator]\n })\n }, [path])\n\n return (\n <div className=\"grid grid-cols-[auto_1fr] gap-2 items-center\">\n <EndpointBadge variant={method as ApiRouteMethod}>{method}</EndpointBadge>\n <span className=\"font-mono font-bold whitespace-nowrap flex flex-row gap-2 items-center truncate\">\n <PathSeparator />\n {pathView}\n </span>\n </div>\n )\n}\n","import { cn } from '@motiadev/ui'\nimport type { FC } from 'react'\nimport type { ApiEndpoint } from '../types/endpoint'\nimport { EndpointPath } from './endpoint-path'\n\ntype EndpointItemProps = {\n endpoint: ApiEndpoint\n isSelected: boolean\n isLast: boolean\n onSelect: (id: string) => void\n}\n\nexport const EndpointItem: FC<EndpointItemProps> = ({ endpoint, isSelected, isLast, onSelect }) => (\n <div\n data-testid={`endpoint-${endpoint.method}-${endpoint.path}`}\n onClick={() => onSelect(endpoint.id)}\n className={cn(\n 'grid grid-cols-[auto_1fr] items-center justify-center px-[17px] select-none hover:bg-muted-foreground/10 cursor-pointer',\n isSelected && 'bg-muted-foreground/10',\n )}\n >\n {isLast ? (\n <svg width=\"14\" height=\"34\" viewBox=\"0 0 12 34\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.5 16.5C6.50006 19.2614 8.7386 21.4999 11.5 21.5C11.7759 21.5003 12 21.724 12 22C12 22.276 11.7759 22.4997 11.5 22.5C8.18632 22.4999 5.50006 19.8137 5.5 16.5V0H6.5V16.5Z\"\n className=\"fill-[#555]\"\n />\n </svg>\n ) : (\n <svg width=\"14\" height=\"34\" viewBox=\"0 0 12 34\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.5 0V11.5C6.50007 14.2614 8.73861 16.4999 11.5 16.5C11.7759 16.5003 12 16.724 12 17C12 17.276 11.7759 17.4997 11.5 17.5C9.41273 17.5 7.57486 16.4335 6.5 14.8164V34H5.5V0H6.5Z\"\n className=\"fill-[#555]\"\n />\n </svg>\n )}\n\n <div>\n <div className=\"grid grid-cols-[auto_1fr] items-center gap-3 px-2\">\n <EndpointPath method={endpoint.method} path={endpoint.path} />\n <span className=\"text-sm text-muted-foreground truncate\">{endpoint.description}</span>\n </div>\n </div>\n </div>\n)\n","import { cn } from '@motiadev/ui'\nimport { ChevronDown } from 'lucide-react'\nimport type { FC } from 'react'\nimport type { ApiEndpoint } from '../types/endpoint'\nimport { EndpointItem } from './endpoint-item'\n\ntype FlowGroupProps = {\n flow: string\n endpoints: ApiEndpoint[]\n isOpen: boolean\n isSelected: boolean\n onToggle: (flow: string) => void\n onClearSelection: () => void\n selectedEndpointId?: string\n onSelectEndpoint: (id: string) => void\n}\n\nexport const FlowGroup: FC<FlowGroupProps> = ({\n flow,\n endpoints,\n isOpen,\n isSelected,\n onToggle,\n onClearSelection,\n selectedEndpointId,\n onSelectEndpoint,\n}: FlowGroupProps) => {\n return (\n <div className=\"pt-2\">\n <button\n data-testid={`flow-group-${flow}`}\n className=\"w-full grid grid-cols-[auto_1fr] items-center gap-3 hover:bg-muted/40 cursor-pointer min-h-8.5 select-none hover:bg-muted-foreground/10 px-4\"\n onClick={() => {\n if (isSelected) {\n onClearSelection()\n }\n onToggle(flow)\n }}\n >\n <div className=\"grid grid-cols-1\">\n <ChevronDown\n className={cn('w-4 h-4 transition-transform duration-300 text-[#555]', { 'rotate-180 mt-2.5': isOpen })}\n strokeWidth={1.5}\n />\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"2\"\n height=\"10\"\n viewBox=\"0 0 2 10\"\n fill=\"none\"\n className={cn('ml-[7px]', { hidden: !isOpen })}\n >\n <path\n d=\"M1.5 1C1.5 0.723858 1.27614 0.5 1 0.5C0.723858 0.5 0.5 0.723858 0.5 1H1H1.5ZM1 1H0.5V10H1H1.5V1H1Z\"\n className=\"fill-[#555]\"\n />\n </svg>\n </div>\n <h3 className=\"text-sm font-medium text-left\">{flow}</h3>\n </button>\n\n <div className={cn('grid grid-cols-1 items-center justify-center', { hidden: !isOpen })}>\n {endpoints.map((endpoint: ApiEndpoint, index: number) => (\n <EndpointItem\n key={endpoint.id}\n endpoint={endpoint}\n isSelected={selectedEndpointId === endpoint.id}\n isLast={index === endpoints.length - 1}\n onSelect={onSelectEndpoint}\n />\n ))}\n </div>\n </div>\n )\n}\n","import { create } from 'zustand'\nimport { createJSONStorage, devtools, persist } from 'zustand/middleware'\n\nexport type ConfigurationLitItem = {\n name: string\n value: string\n active: boolean\n}\n\nexport type Headers = {\n [key: string]: ConfigurationLitItem\n}\n\nexport type Params = {\n [key: string]: ConfigurationLitItem\n}\n\nconst defaultHeaders: Headers = {\n CONTENT_TYPE: { name: 'Content-Type', value: 'application/json', active: true },\n USER_AGENT: { name: 'User-Agent', value: 'Motia/1.0', active: true },\n ACCEPT: { name: 'Accept', value: 'application/json', active: true },\n}\n\nexport type ResponseData = {\n headers: Record<string, string>\n body: Record<string, any>\n statusCode: number\n executionTime: number\n}\n\ntype Actions = {\n setResponse: (response: Response | undefined, startTime?: number) => void\n setHeaders: (headers: Headers) => void\n removeHeaders: (key: string) => void\n setBody: (body: string) => void\n setSelectedEndpointId: (selectedEndpointId: string | undefined) => void\n setQueryParams: (params: Params) => void\n removeQueryParams: (key: string) => void\n setPathParams: (pathParams: Params) => void\n removePathParams: (key: string) => void\n setBodyIsValid: (bodyIsValid: boolean) => void\n toggleFlowGroupStatus: (flow: string) => void\n}\n\ntype State = {\n selectedEndpointId: string\n headers: Record<string, Headers>\n body: Record<string, string>\n bodyIsValid: Record<string, boolean>\n response: Record<string, ResponseData | undefined>\n queryParams: Record<string, Params>\n pathParams: Record<string, Params>\n flowGroupStatus: Record<string, boolean>\n}\n\nexport type UseEndpointConfiguration = State & Actions\n\nexport const getHeadersSelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.headers[selectedEndpointId] || defaultHeaders\n }\n return defaultHeaders\n}\n\nexport const getBodyIsValidSelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.bodyIsValid[selectedEndpointId]\n }\n return true\n}\n\nexport const getBodySelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.body[selectedEndpointId] || ''\n }\n return ''\n}\n\nexport const getResponseSelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.response[selectedEndpointId] || undefined\n }\n return undefined\n}\n\nexport const getQueryParamsSelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.queryParams[selectedEndpointId] || {}\n }\n return {}\n}\n\nexport const getPathParamsSelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.pathParams[selectedEndpointId] || {}\n }\n return {}\n}\n\nexport const useEndpointConfiguration = create<UseEndpointConfiguration>()(\n persist(\n devtools((set) => ({\n selectedEndpointId: '',\n headers: {},\n body: {},\n bodyIsValid: {},\n response: {},\n queryParams: {},\n pathParams: {},\n flowGroupStatus: {},\n toggleFlowGroupStatus: (flow: string) =>\n set((state) => ({ flowGroupStatus: { ...state.flowGroupStatus, [flow]: !state.flowGroupStatus[flow] } })),\n setSelectedEndpointId: (selectedEndpointId: string) => set({ selectedEndpointId }),\n setQueryParams: (queryParams: Params) =>\n set((state) => ({ queryParams: { ...state.queryParams, [state.selectedEndpointId]: queryParams } })),\n removeQueryParams: (key: string) =>\n set((state) => {\n const newQueryParams = { ...state.queryParams[state.selectedEndpointId] }\n delete newQueryParams[key]\n return {\n queryParams: {\n ...state.queryParams,\n [state.selectedEndpointId]: newQueryParams,\n },\n }\n }),\n setPathParams: (pathParams: Params) =>\n set((state) => ({ pathParams: { ...state.pathParams, [state.selectedEndpointId]: pathParams } })),\n removePathParams: (key: string) =>\n set((state) => {\n const newPathParams = { ...state.pathParams[state.selectedEndpointId] }\n delete newPathParams[key]\n return {\n pathParams: {\n ...state.pathParams,\n [state.selectedEndpointId]: newPathParams,\n },\n }\n }),\n setHeaders: (headers: Headers) =>\n set((state) => ({ headers: { ...state.headers, [state.selectedEndpointId]: headers } })),\n setResponse: async (response: Response | undefined, startTime: number) => {\n if (!response) {\n set((state) => ({\n response: {\n ...state.response,\n [state.selectedEndpointId]: undefined,\n },\n }))\n return\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let body: any\n try {\n const contentType = response?.headers.get('content-type') ?? ''\n\n if (contentType.includes('text/')) {\n body = response ? await response.text() : undefined\n } else if (contentType.includes('application/json')) {\n body = response ? await response.json() : undefined\n } else {\n body = response ? await response.blob() : undefined\n // this is important to avoid the body being serialized to JSON\n body.toJSON = () => 'Preview not available'\n }\n } catch (error) {\n console.error('Error setting response:', error)\n }\n set((state) => ({\n response: {\n ...state.response,\n [state.selectedEndpointId]: {\n executionTime: Date.now() - startTime,\n statusCode: response?.status,\n headers: response?.headers ? Object.fromEntries(response.headers.entries()) : {},\n body: body,\n },\n },\n }))\n },\n setBody: (body: string) => set((state) => ({ body: { ...state.body, [state.selectedEndpointId]: body } })),\n removeHeaders: (key: string) =>\n set((state) => {\n const currentHeaders = state.headers[state.selectedEndpointId] || defaultHeaders\n const newHeaders = { ...currentHeaders }\n delete newHeaders[key]\n return {\n headers: {\n ...state.headers,\n [state.selectedEndpointId]: newHeaders,\n },\n }\n }),\n setBodyIsValid: (bodyIsValid: boolean) =>\n set((state) => ({ bodyIsValid: { ...state.bodyIsValid, [state.selectedEndpointId]: bodyIsValid } })),\n })),\n {\n name: 'motia-endpoint-configuration',\n storage: createJSONStorage(() => localStorage),\n },\n ),\n)\n","import { useStreamGroup } from '@motiadev/stream-client-react'\nimport { useMemo } from 'react'\nimport type { ApiEndpoint } from '../types/endpoint'\n\nexport const useGetEndpoints = () => {\n const { data: endpoints } = useStreamGroup<ApiEndpoint>({\n streamName: '__motia.api-endpoints',\n groupId: 'default',\n })\n\n const groupedEndpoints = useMemo(() => {\n return endpoints.reduce(\n (acc, endpoint) => {\n if (endpoint.flows && endpoint.flows.length > 0) {\n endpoint.flows.forEach((flow) => {\n acc[flow] = acc[flow] || []\n acc[flow].push(endpoint)\n })\n } else {\n acc['no-flow'] = acc['no-flow'] || []\n acc['no-flow'].push(endpoint)\n }\n return acc\n },\n {} as Record<string, ApiEndpoint[]>,\n )\n }, [endpoints])\n\n return { endpoints, groupedEndpoints }\n}\n","export const usePathParams = (path: string) => {\n const pathParams = path.match(/:(\\w+)/g)\n return pathParams?.map((param) => param.slice(1)) ?? []\n}\n","const resolveRef = (ref: string, rootSchema?: Record<string, any>): Record<string, any> | undefined => {\n if (!rootSchema || !ref.startsWith('#/$defs/')) {\n return undefined\n }\n\n const defName = ref.replace('#/$defs/', '')\n return rootSchema.$defs?.[defName]\n}\n\n/**\n * Converts a schema to a JSON object with default values\n * Supports both TypeScript step schemas (inline definitions) and Python step schemas ($defs/$ref)\n * @param schema - The schema to convert\n * @param rootSchema - Optional root schema containing $defs for $ref resolution. Defaults to schema if not provided.\n */\nexport const convertSchemaToJson = (schema?: Record<string, any>, rootSchema?: Record<string, any>): any => {\n if (!schema) return {}\n\n const effectiveRootSchema = rootSchema ?? schema\n\n if (schema.$ref) {\n const resolvedSchema = resolveRef(schema.$ref, effectiveRootSchema)\n if (resolvedSchema) {\n return convertSchemaToJson(resolvedSchema, effectiveRootSchema)\n }\n return {}\n }\n\n if (schema.anyOf && Array.isArray(schema.anyOf)) {\n const nonNullSchema = schema.anyOf.find((item: any) => item && item.type !== 'null')\n if (nonNullSchema) {\n return convertSchemaToJson(nonNullSchema, effectiveRootSchema)\n }\n return null\n }\n\n if (schema.type === 'object') {\n const result: Record<string, any> = {}\n\n if (schema.properties) {\n Object.entries(schema.properties).forEach(([key, value]: [string, any]) => {\n result[key] = convertSchemaToJson(value, effectiveRootSchema)\n })\n }\n\n return result\n }\n\n switch (schema.type) {\n case 'array':\n return schema.items ? [convertSchemaToJson(schema.items, effectiveRootSchema)] : []\n case 'string':\n return schema.enum?.[0] ?? schema.description ?? 'string'\n case 'number':\n return schema.description ?? 0\n case 'integer':\n return 0\n case 'boolean':\n return schema.description ?? false\n case 'null':\n return null\n default:\n return undefined\n }\n}\n","import { useEffect, useState } from 'react'\nimport { convertSchemaToJson } from './utils'\n\nexport const useJsonSchemaToJson = (schema: Record<string, any> | undefined) => {\n const [body, setBody] = useState<string>('')\n\n useEffect(() => {\n if (schema) {\n setBody(JSON.stringify(convertSchemaToJson(schema), null, 2))\n }\n }, [schema])\n\n return { body, setBody }\n}\n","import { Panel } from '@motiadev/ui'\nimport type { FC } from 'react'\nimport ReactJson from 'react18-json-view'\nimport 'react18-json-view/src/dark.css'\nimport 'react18-json-view/src/style.css'\nimport type { ApiEndpoint } from '../types/endpoint'\n\ntype Props = {\n endpoint: ApiEndpoint\n value: string\n panelName: string\n}\n\nexport const EndpointBodyPanel: FC<Props> = ({ endpoint, panelName, value }) => {\n const shouldHaveBody = ['post', 'put', 'patch'].includes(endpoint.method.toLowerCase())\n\n if (!shouldHaveBody) {\n return null\n }\n\n return (\n <Panel title=\"Body\" size=\"sm\" contentClassName=\"p-0\" data-testid={`endpoint-body-panel__${panelName}`}>\n <ReactJson\n src={value ? JSON.parse(value) : {}}\n theme=\"default\"\n enableClipboard={false}\n style={{ backgroundColor: 'transparent' }}\n />\n </Panel>\n )\n}\n","import { Panel } from '@motiadev/ui'\nimport type { FC } from 'react'\nimport { usePathParams } from '../hooks/use-path-params'\nimport type { ApiEndpoint } from '../types/endpoint'\n\ntype Props = {\n endpoint: ApiEndpoint\n}\n\nexport const EndpointPathParamsPanel: FC<Props> = ({ endpoint }) => {\n const pathParams = usePathParams(endpoint.path)\n\n if (!pathParams.length) {\n return null\n }\n\n return (\n <Panel title=\"Path params\" size=\"sm\" variant=\"default\">\n <div className=\"grid gap-3\" style={{ gridTemplateColumns: '1fr 2fr' }}>\n {pathParams.map((param: string) => (\n <div key={param} className=\"font-bold leading-[36px] flex text-xs\">\n {param}\n </div>\n ))}\n </div>\n </Panel>\n )\n}\n","import { Panel } from '@motiadev/ui'\nimport { type FC, Fragment } from 'react'\nimport type { ApiEndpoint } from '../types/endpoint'\n\ntype Props = {\n endpoint: ApiEndpoint\n}\n\nexport const EndpointQueryParamsPanel: FC<Props> = ({ endpoint }) => {\n if (!endpoint.queryParams?.length) {\n return null\n }\n\n return (\n <Panel title=\"Query params\" size=\"sm\" variant=\"outlined\">\n <div className=\"grid gap-3\" style={{ gridTemplateColumns: '1fr 2fr', gridTemplateRows: '1fr 1fr' }}>\n {endpoint.queryParams.map((param: { name: string; description: string }) => (\n <Fragment key={param.name}>\n <div className=\"font-bold leading-[36px] flex text-xs\">{param.name}</div>\n <div className=\"flex items-center text-xs \">\n <span>{param.description}</span>\n </div>\n </Fragment>\n ))}\n </div>\n </Panel>\n )\n}\n","import { Tabs, TabsContent, TabsList, TabsTrigger, useThemeStore } from '@motiadev/ui'\nimport { type FC, useMemo } from 'react'\nimport ReactJson from 'react18-json-view'\nimport { convertSchemaToJson } from '../hooks/utils'\n\nexport type EndpointResponseItem = {\n responseCode: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n bodySchema: Record<string, any>\n}\n\ntype EndpointResponseProps = {\n items: EndpointResponseItem[]\n}\n\nconst EndpointResponseSchemaItem: FC<EndpointResponseItem> = ({ responseCode, bodySchema }) => {\n const theme = useThemeStore((store: { theme: string }) => store.theme)\n const schema = useMemo(() => convertSchemaToJson(bodySchema), [bodySchema])\n const description = typeof bodySchema.description === 'string' ? bodySchema.description : ''\n\n return (\n <TabsContent value={responseCode} key={responseCode} className=\"border-t\">\n <div className=\"text-xs font-mono rounded-lg whitespace-pre-wrap\">\n {schema ? (\n <ReactJson\n src={schema}\n dark={theme === 'dark'}\n enableClipboard={false}\n style={{ backgroundColor: 'transparent' }}\n />\n ) : (\n <div className=\"text-xs font-mono rounded-lg whitespace-pre-wrap p-4\">{description}</div>\n )}\n </div>\n </TabsContent>\n )\n}\n\nexport const EndpointResponseSchema: FC<EndpointResponseProps> = ({ items }) => {\n if (items.length === 0) {\n return null\n }\n\n return (\n <div className=\"flex flex-col rounded-lg border\">\n <Tabs defaultValue={items[0].responseCode}>\n <div className=\"flex items-center justify-between bg-card\">\n <TabsList className=\"bg-transparent p-0\">\n {items.map((item) => (\n <TabsTrigger\n value={item.responseCode}\n key={item.responseCode}\n className=\"text-xs font-bold cursor-pointer\"\n >\n {item.responseCode}\n </TabsTrigger>\n ))}\n </TabsList>\n </div>\n\n {items.map((props) => (\n <EndpointResponseSchemaItem key={props.responseCode} {...props} />\n ))}\n </Tabs>\n </div>\n )\n}\n","import { Sidebar } from '@motiadev/ui'\nimport { X } from 'lucide-react'\nimport type { FC } from 'react'\nimport { EndpointPath } from '../components/endpoint-path'\nimport { useJsonSchemaToJson } from '../hooks/use-json-schema-to-json'\nimport type { ApiEndpoint } from '../types/endpoint'\nimport { EndpointBodyPanel } from './spec-body-panel'\nimport { EndpointPathParamsPanel } from './spec-path-params-panel'\nimport { EndpointQueryParamsPanel } from './spec-query-params-panel'\nimport { EndpointResponseSchema } from './spec-response-schema'\n\ntype Props = { endpoint: ApiEndpoint; onClose: () => void }\n\nexport const SpecSidePanel: FC<Props> = ({ endpoint, onClose }) => {\n const { body } = useJsonSchemaToJson(endpoint.bodySchema)\n\n return (\n <Sidebar\n initialWidth={600}\n subtitle={endpoint.description}\n title={<EndpointPath method={endpoint.method} path={endpoint.path} />}\n onClose={onClose}\n actions={[\n {\n icon: <X className=\"cursor-pointer w-4 h-4\" onClick={onClose} />,\n onClick: onClose,\n },\n ]}\n >\n <EndpointPathParamsPanel endpoint={endpoint} />\n <EndpointQueryParamsPanel endpoint={endpoint} />\n <EndpointBodyPanel endpoint={endpoint} panelName=\"details\" value={body} />\n <EndpointResponseSchema\n items={Object.entries(endpoint?.responseSchema ?? {}).map(([status, schema]) => ({\n responseCode: status,\n bodySchema: schema,\n }))}\n />\n </Sidebar>\n )\n}\n","import { Editor, useMonaco } from '@monaco-editor/react'\nimport { useThemeStore } from '@motiadev/ui'\nimport { type FC, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\ntype JsonEditorProps = {\n value: string\n schema?: Record<string, unknown>\n onChange?: (value: string) => void\n onValidate?: (isValid: boolean) => void\n language?: 'json' | string\n readOnly?: boolean\n}\n\nexport const JsonEditor: FC<JsonEditorProps> = ({\n value,\n schema,\n onChange,\n onValidate,\n language = 'json',\n readOnly = false,\n}) => {\n const monaco = useMonaco()\n const theme = useThemeStore((state: { theme: string }) => state.theme)\n const editorTheme = useMemo(() => (theme === 'dark' ? 'transparent-dark' : 'transparent-light'), [theme])\n const [editor, setEditor] = useState<any>(null)\n const resizeAnimationFrameRef = useRef<number | null>(null)\n const isValidatingRef = useRef(false)\n\n useLayoutEffect(() => {\n if (!monaco) return\n\n monaco.editor.defineTheme('transparent-light', {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n 'editor.lineHighlightBackground': '#00000000',\n 'editorLineNumber.foreground': '#999999',\n 'editorLineNumber.activeForeground': '#000000',\n focusBorder: '#00000000',\n 'widget.border': '#00000000',\n 'editor.border': '#00000000',\n 'editorWidget.border': '#00000000',\n },\n })\n monaco.editor.defineTheme('transparent-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n 'editor.lineHighlightBackground': '#00000000',\n 'editorLineNumber.foreground': '#666666',\n 'editorLineNumber.activeForeground': '#ffffff',\n focusBorder: '#00000000',\n 'widget.border': '#00000000',\n 'editor.border': '#00000000',\n 'editorWidget.border': '#00000000',\n },\n })\n }, [monaco])\n\n useEffect(() => {\n if (!monaco) return\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ isolatedModules: true })\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemas: schema\n ? [\n {\n uri: window.location.href,\n fileMatch: ['*'],\n schema,\n },\n ]\n : [],\n })\n }, [monaco, schema])\n\n useLayoutEffect(() => {\n if (!monaco) return\n monaco.editor.setTheme(editorTheme)\n }, [monaco, editorTheme])\n\n useEffect(() => {\n if (!editor) return\n\n const container = editor.getContainerDomNode().parentElement?.parentElement\n if (!container) return\n\n const handleResize = () => {\n if (resizeAnimationFrameRef.current !== null) {\n cancelAnimationFrame(resizeAnimationFrameRef.current)\n }\n\n resizeAnimationFrameRef.current = requestAnimationFrame(() => {\n const { width, height } = container.getBoundingClientRect()\n editor.layout({ width, height })\n resizeAnimationFrameRef.current = null\n })\n }\n\n handleResize()\n\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(container)\n\n return () => {\n resizeObserver.disconnect()\n if (resizeAnimationFrameRef.current !== null) {\n cancelAnimationFrame(resizeAnimationFrameRef.current)\n }\n }\n }, [editor])\n\n useEffect(() => {\n if (!editor || !monaco || !onValidate || isValidatingRef.current) return\n\n const model = editor.getModel()\n if (!model) return\n\n const isEmptyWithSchema = schema && !value\n if (isEmptyWithSchema) {\n isValidatingRef.current = true\n onValidate(false)\n isValidatingRef.current = false\n return\n }\n\n isValidatingRef.current = true\n const timeoutId = setTimeout(() => {\n const markers = monaco.editor.getModelMarkers({ resource: model.uri })\n const isValid = markers.length === 0\n onValidate(isValid)\n isValidatingRef.current = false\n }, 100)\n\n return () => {\n clearTimeout(timeoutId)\n isValidatingRef.current = false\n }\n }, [editor, monaco, onValidate, value, schema])\n\n const editorKey = useMemo(() => (schema ? JSON.stringify(schema) : 'no-schema'), [schema])\n\n return (\n <Editor\n key={editorKey}\n data-testid=\"json-editor\"\n language={language}\n value={value}\n loading=\"\"\n theme={editorTheme}\n onMount={setEditor}\n onChange={(value: string | undefined) => {\n onChange?.(value ?? '')\n }}\n onValidate={(markers: any[]) => {\n if (!onValidate || isValidatingRef.current) return\n isValidatingRef.current = true\n const isEmptyWithSchema = schema && !value\n if (isEmptyWithSchema) {\n onValidate(false)\n } else {\n onValidate(markers.length === 0)\n }\n isValidatingRef.current = false\n }}\n options={{\n automaticLayout: false,\n readOnly,\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n overviewRulerLanes: 0,\n }}\n />\n )\n}\n","import { CircleX } from 'lucide-react'\nimport { type FC, memo, useCallback, useEffect, useRef } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport { JsonEditor } from '../components/json-editor'\nimport { getBodyIsValidSelector, getBodySelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration'\nimport { convertSchemaToJson } from '../hooks/utils'\n\ntype SidePanelBodyTabProps = {\n schema: Record<string, any> | undefined\n}\n\nexport const SidePanelBodyTab: FC<SidePanelBodyTabProps> = memo(({ schema }) => {\n const { setBody, setBodyIsValid } = useEndpointConfiguration()\n const bodyIsValid = useEndpointConfiguration(useShallow(getBodyIsValidSelector))\n const body = useEndpointConfiguration(getBodySelector)\n const previousSchemaRef = useRef<Record<string, any> | undefined>(schema)\n const userClearedRef = useRef(false)\n\n useEffect(() => {\n const schemaChanged = previousSchemaRef.current !== schema\n previousSchemaRef.current = schema\n\n if (schemaChanged) {\n userClearedRef.current = false\n }\n\n if (schema && !body && !userClearedRef.current) {\n setBody(JSON.stringify(convertSchemaToJson(schema), null, 2))\n return\n }\n\n if (!schema) {\n setBody(body || '')\n setBodyIsValid(true)\n }\n }, [schema, body, setBody, setBodyIsValid])\n\n const handleBodyChange = useCallback(\n (value: string) => {\n setBody(value)\n const isEmptyWithSchema = schema && !value\n if (isEmptyWithSchema) {\n setBodyIsValid(false)\n userClearedRef.current = true\n } else {\n userClearedRef.current = false\n }\n },\n [setBody, schema, setBodyIsValid],\n )\n\n return (\n <div className=\"max-h-full h-full relative\">\n <JsonEditor value={body} schema={schema} onChange={handleBodyChange} onValidate={setBodyIsValid} />\n {bodyIsValid === false && (\n <div\n className=\"absolute bottom-0 left-0 right-0 border-t border-border p-3 text-sm dark:text-yellow-500 text-yellow-700 flex items-center gap-1 font-medium\"\n data-testid=\"endpoint-body-tab-invalid\"\n >\n <CircleX className=\"w-4 h-4\" />\n The body payload is invalid\n </div>\n )}\n </div>\n )\n})\n","import { Button, Checkbox, cn, Input } from '@motiadev/ui'\nimport { AlertCircle, Check, Trash2 } from 'lucide-react'\nimport { type FC, memo, useCallback, useRef, useState } from 'react'\nimport type { ConfigurationLitItem } from '../hooks/use-endpoint-configuration'\n\ninterface ConfigurationListItemProps {\n value: ConfigurationLitItem\n id: string\n onUpdate: (key: string, field: 'name' | 'value' | 'active', value: string | boolean) => void\n onRemove?: (key: string) => void\n required?: boolean\n}\n\nexport const ConfigurationListItem: FC<ConfigurationListItemProps> = memo(\n ({ value, id, onUpdate, onRemove, required = false }) => {\n const [activeConfiguration, setActiveConfiguration] = useState<string | null>(null)\n const [valueToDelete, setValueToDelete] = useState<string | null>(null)\n const deleteTimeout = useRef<NodeJS.Timeout | undefined>(undefined)\n const isActive = activeConfiguration === id\n\n const onDelete = useCallback(\n (key: string) => {\n clearTimeout(deleteTimeout.current)\n setValueToDelete(key)\n deleteTimeout.current = setTimeout(() => {\n setValueToDelete(null)\n }, 5000)\n },\n [setValueToDelete],\n )\n\n const onMouseOver = useCallback(() => {\n if (required) return\n setActiveConfiguration(id)\n }, [id, required])\n\n const onMouseLeave = useCallback(() => {\n if (required) return\n setActiveConfiguration(null)\n }, [required])\n\n return (\n <div\n className={cn(\n 'grid grid-cols-[auto_1fr_auto] items-center py-2 px-4 bg-muted/30 rounded-lg gap-2',\n isActive && 'bg-card',\n )}\n onMouseOver={onMouseOver}\n onMouseLeave={onMouseLeave}\n >\n <Checkbox\n checked={value.active}\n onCheckedChange={(checked: boolean) => onUpdate(id, 'active', checked)}\n disabled={required}\n >\n <Check className=\"h-3 w-3\" />\n </Checkbox>\n <div className=\"grid grid-cols-2 gap-2\">\n <Input\n readOnly={required}\n disabled={!value.active}\n variant={required ? 'outlineReadonly' : 'outline'}\n id={`name-${id}`}\n defaultValue={value.name}\n onBlur={(e: React.ChangeEvent<HTMLInputElement>) => onUpdate(id, 'name', e.target.value)}\n placeholder=\"Name\"\n className=\"h-8\"\n />\n <Input\n disabled={!value.active}\n variant={'outline'}\n id={`value-${id}`}\n defaultValue={value.value}\n onBlur={(e: React.FocusEvent<HTMLInputElement>) => onUpdate(id, 'value', e.target.value)}\n placeholder=\"Value\"\n className=\"h-8\"\n />\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => {\n if (valueToDelete === id) {\n onRemove?.(id)\n } else {\n onDelete(id)\n }\n }}\n className={cn('h-6 w-6 opacity-0 transition-opacity duration-200', isActive && 'opacity-100')}\n title={valueToDelete === id && isActive ? 'Click again to remove' : 'Remove'}\n >\n {valueToDelete === id ? <AlertCircle className=\"h-3 w-3 text-destructive\" /> : <Trash2 className=\"h-3 w-3\" />}\n </Button>\n </div>\n )\n },\n)\n","import { Button } from '@motiadev/ui'\nimport { Plus } from 'lucide-react'\nimport { useCallback } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport { ConfigurationListItem } from '../components/configuration-list-item'\nimport { getHeadersSelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration'\n\nexport const SidePanelHeadersTab = () => {\n const { setHeaders, removeHeaders } = useEndpointConfiguration()\n const headers = useEndpointConfiguration(useShallow(getHeadersSelector))\n\n const addHeader = useCallback(() => {\n const newHeader = {\n name: '',\n value: '',\n active: true,\n }\n setHeaders({ ...headers, [new Date().getTime().toString()]: newHeader })\n }, [headers, setHeaders])\n\n const updateHeader = useCallback(\n (key: string, field: 'name' | 'value' | 'active', value: string | boolean) => {\n if (!key) return\n setHeaders({ ...headers, [key]: { ...headers[key], [field]: value } })\n },\n [headers, setHeaders],\n )\n\n return (\n <div className=\"h-full max-h-full grid grid-rows-[auto_1fr]\">\n <div className=\"grid px-4 border-b h-10 items-center grid-cols-[auto_1fr]\">\n <Button size=\"sm\" onClick={addHeader}>\n <Plus className=\"h-3 w-3\" />\n Add\n </Button>\n </div>\n\n <div className=\"p-2\">\n {Object.entries(headers).map(([key, header]) => (\n <ConfigurationListItem key={key} value={header} id={key} onUpdate={updateHeader} onRemove={removeHeaders} />\n ))}\n\n {Object.entries(headers).length === 0 && (\n <div className=\"grid grid-cols-1 items-center h-full\">\n <div className=\"text-sm text-muted-foreground text-center\">There are no headers in this endpoint</div>\n </div>\n )}\n </div>\n </div>\n )\n}\n","import { useMemo } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport {\n getPathParamsSelector,\n getQueryParamsSelector,\n type UseEndpointConfiguration,\n useEndpointConfiguration,\n} from './use-endpoint-configuration'\n\nconst queryParamsSelector = (state: UseEndpointConfiguration) =>\n Object.values(getQueryParamsSelector(state)).filter(\n (param) => param.active && param.value !== '' && param.name !== '',\n )\n\nexport const usePathUrl = (path: string) => {\n const pathParams = useEndpointConfiguration(useShallow(getPathParamsSelector))\n const queryParams = useEndpointConfiguration(useShallow(queryParamsSelector))\n\n return useMemo(() => {\n const url = path.replace(/:(\\w+)/g, (match, p1) => {\n return pathParams[p1]?.value || match\n })\n return (\n url + (queryParams.length > 0 ? `?${queryParams.map((param) => `${param.name}=${param.value}`).join('&')}` : '')\n )\n }, [path, pathParams, queryParams])\n}\n","import { Button, cn } from '@motiadev/ui'\nimport { Check, Copy } from 'lucide-react'\nimport { type FC, useState } from 'react'\nimport { usePathUrl } from '../hooks/use-path-url'\n\ninterface EndpointPathPreviewProps {\n path: string\n baseUrl?: string\n}\n\nexport const EndpointPathPreview: FC<EndpointPathPreviewProps> = ({ path, baseUrl = window.location.origin }) => {\n const pathUrl = usePathUrl(path)\n const fullUrl = `${baseUrl}${pathUrl}`\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(fullUrl)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy URL:', err)\n }\n }\n\n return (\n <div className=\"grid grid-cols-[auto_1fr] items-center gap-5 px-5 relative border-b border-border\">\n <div className=\"text-sm font-medium py-2\">URL Preview</div>\n\n <div className=\"bg-muted-foreground/10 box-border grid grid-cols-[1fr_auto] gap-1 h-6 items-center px-2 py-1 rounded border border-border\">\n <div className=\"min-w-0\">\n <div className=\"font-medium text-xs text-muted-foreground truncate\" title={fullUrl}>\n {fullUrl}\n </div>\n </div>\n\n <Button\n onClick={handleCopy}\n className={cn(\n 'w-3 h-3 grid place-items-center transition-colors cursor-pointer',\n copied ? 'text-green-400' : 'text-muted-foreground',\n )}\n variant=\"icon\"\n size=\"sm\"\n aria-label=\"Copy URL\"\n >\n {copied ? <Check className=\"w-2.5 h-2.5\" /> : <Copy className=\"w-2.5 h-2.5\" />}\n </Button>\n </div>\n </div>\n )\n}\n","import { Button } from '@motiadev/ui'\nimport { Plus } from 'lucide-react'\nimport { useCallback, useMemo } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport { ConfigurationListItem } from '../components/configuration-list-item'\nimport { EndpointPathPreview } from '../components/endpoint-path-preview'\nimport {\n getPathParamsSelector,\n getQueryParamsSelector,\n useEndpointConfiguration,\n} from '../hooks/use-endpoint-configuration'\n\ntype SidePanelParamsTabProps = {\n path: string\n}\n\nexport const SidePanelParamsTab = ({ path }: SidePanelParamsTabProps) => {\n const { setQueryParams, removeQueryParams, setPathParams } = useEndpointConfiguration()\n const queryParams = useEndpointConfiguration(useShallow(getQueryParamsSelector))\n const pathParams = useEndpointConfiguration(useShallow(getPathParamsSelector))\n const pathParamsConfig = useMemo(() => {\n const params = path.match(/:(\\w+)/g)\n return (\n params?.map((param) => {\n return { name: param.slice(1), value: pathParams[param.slice(1)]?.value ?? '', active: true }\n }) ?? []\n )\n }, [path])\n\n const addParam = useCallback(() => {\n const newParam = {\n name: '',\n value: '',\n active: true,\n }\n setQueryParams({ ...queryParams, [new Date().getTime().toString()]: newParam })\n }, [queryParams, setQueryParams])\n\n const updateParam = useCallback(\n (key: string, field: 'name' | 'value' | 'active', value: string | boolean) => {\n if (!key) return\n setQueryParams({ ...queryParams, [key]: { ...queryParams[key], [field]: value } })\n },\n [queryParams, setQueryParams],\n )\n\n const updatePathParam = useCallback(\n (key: string, field: 'name' | 'value' | 'active', value: string | boolean) => {\n if (!key) return\n setPathParams({ ...pathParams, [key]: { ...pathParams[key], [field]: value } })\n },\n [pathParams, setPathParams],\n )\n\n return (\n <div className=\"h-full grid grid-rows-[auto_auto_1fr]\">\n <div className=\"grid px-4 border-b h-10 items-center grid-cols-[auto_1fr]\">\n <Button size=\"sm\" onClick={addParam}>\n <Plus className=\"h-3 w-3\" />\n Add\n </Button>\n </div>\n <EndpointPathPreview path={path} />\n\n <div className=\"grid grid-rows-[1fr_1fr]\">\n {pathParamsConfig.length > 0 && (\n <div className=\"p-2\">\n <div className=\"text-sm font-medium pl-3\">Path variables</div>\n {pathParamsConfig.map((pathName) => (\n <ConfigurationListItem\n key={pathName.name}\n value={{ name: pathName.name, value: pathName.value, active: pathName.active }}\n id={pathName.name}\n required={true}\n onUpdate={updatePathParam}\n />\n ))}\n </div>\n )}\n\n <div className=\"p-2 border-b border-border\">\n <div className=\"text-sm font-medium pl-3\">Query parameters</div>\n {Object.entries(queryParams).map(([key, param]) => (\n <ConfigurationListItem\n key={key}\n value={param}\n id={key}\n onUpdate={updateParam}\n onRemove={removeQueryParams}\n />\n ))}\n\n {Object.entries(queryParams).length === 0 && (\n <div className=\"grid grid-cols-1 items-center h-full\">\n <div className=\"text-sm text-muted-foreground text-center\">\n There are no query params in this endpoint\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import { useStreamItem } from '@motiadev/stream-client-react'\n\nexport const useStateStream = (object: Record<string, any> | undefined) => {\n const { __motia, ...rest } = typeof object === 'string' ? {} : object || {}\n const { data } = useStreamItem(__motia)\n const originalData = Array.isArray(object) ? object : rest || object\n\n if (typeof object === 'string') {\n return {\n data: object,\n originalData: object,\n isStreamed: false,\n }\n }\n\n return {\n data: JSON.stringify(data || originalData, null, 2),\n originalData,\n isStreamed: !!__motia,\n }\n}\n","const statusMessages: Record<number, string> = {\n // 1xx Informational\n 100: 'Continue',\n 101: 'Switching Protocols',\n 102: 'Processing',\n 103: 'Early Hints',\n\n // 2xx Success\n 200: 'OK',\n 201: 'Created',\n 202: 'Accepted',\n 203: 'Non-Authoritative Information',\n 204: 'No Content',\n 205: 'Reset Content',\n 206: 'Partial Content',\n 207: 'Multi-Status',\n 208: 'Already Reported',\n 226: 'IM Used',\n\n // 3xx Redirection\n 300: 'Multiple Choices',\n 301: 'Moved Permanently',\n 302: 'Found',\n 303: 'See Other',\n 304: 'Not Modified',\n 305: 'Use Proxy',\n 307: 'Temporary Redirect',\n 308: 'Permanent Redirect',\n\n // 4xx Client Error\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 402: 'Payment Required',\n 403: 'Forbidden',\n 404: 'Not Found',\n 405: 'Method Not Allowed',\n 406: 'Not Acceptable',\n 407: 'Proxy Authentication Required',\n 408: 'Request Timeout',\n 409: 'Conflict',\n 410: 'Gone',\n 411: 'Length Required',\n 412: 'Precondition Failed',\n 413: 'Payload Too Large',\n 414: 'URI Too Long',\n 415: 'Unsupported Media Type',\n 416: 'Range Not Satisfiable',\n 417: 'Expectation Failed',\n 418: \"I'm a teapot\",\n 421: 'Misdirected Request',\n 422: 'Unprocessable Entity',\n 423: 'Locked',\n 424: 'Failed Dependency',\n 425: 'Too Early',\n 426: 'Upgrade Required',\n 428: 'Precondition Required',\n 429: 'Too Many Requests',\n 431: 'Request Header Fields Too Large',\n 451: 'Unavailable For Legal Reasons',\n\n // 5xx Server Error\n 500: 'Internal Server Error',\n 501: 'Not Implemented',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n 504: 'Gateway Timeout',\n 505: 'HTTP Version Not Supported',\n 506: 'Variant Also Negotiates',\n 507: 'Insufficient Storage',\n 508: 'Loop Detected',\n 510: 'Not Extended',\n 511: 'Network Authentication Required',\n}\n\nexport const getStatusMessage = (statusCode: number) => {\n return statusMessages[statusCode] || 'Unknown'\n}\n","import { cn } from '@motiadev/ui'\nimport type { FC } from 'react'\nimport { getStatusMessage } from './reponse-code/utils'\n\ntype ResponseCodeProps = {\n statusCode: number\n}\n\nexport const ResponseCode: FC<ResponseCodeProps> = ({ statusCode }) => {\n const statusMessage = getStatusMessage(statusCode)\n const isSuccess = statusCode > 0 && statusCode < 400\n const isWarning = statusCode >= 400 && statusCode < 500\n const isError = statusCode >= 500\n\n return (\n <div\n className={cn(\n 'px-2 py-1 rounded-sm flex items-center gap-1',\n isWarning && 'dark:bg-[#EAB71F]/20 dark:text-[#EAB71F] bg-[#EAB71F] text-white',\n isError && 'dark:bg-[#F8367D]/20 dark:text-[#F8367D] bg-[#F8367D] text-white',\n isSuccess && 'dark:bg-accent-200 dark:text-primary bg-accent text-white',\n )}\n >\n <span className=\"font-bold font-mono\">{statusCode}</span> {statusMessage}\n </div>\n )\n}\n","import { Button, useThemeStore } from '@motiadev/ui'\nimport { Download } from 'lucide-react'\nimport type React from 'react'\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'\nimport { atomDark, oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism'\n\ntype CodeDisplayProps = {\n code: string\n blob: Blob | undefined\n contentType: string\n}\n\nconst codeTagProps = {\n style: {\n fontFamily: 'DM Mono, monospace',\n fontSize: '16px',\n },\n}\n\nconst customStyle = {\n margin: 0,\n borderRadius: 0,\n padding: 0,\n}\n\nconst useLanguage = (contentType: string) => {\n if (contentType?.includes('json')) {\n return 'json'\n }\n if (contentType?.includes('html')) {\n return 'html'\n }\n return 'text'\n}\n\nexport const ResponseContent: React.FC<CodeDisplayProps> = ({ code, blob, contentType }) => {\n const theme = useThemeStore((state) => state.theme)\n const themeStyle = theme === 'dark' ? atomDark : oneLight\n const language = useLanguage(contentType)\n\n const onDownload = () => {\n if (blob) {\n const url = URL.createObjectURL(blob)\n window.open(url, '_blank')\n }\n }\n\n return (\n <div className=\"flex flex-col h-full overflow-y-auto\">\n {blob && (\n <div className=\"flex p-8 justify-center\">\n <Button variant=\"default\" onClick={onDownload}>\n <Download className=\"h-4 w-4\" /> Download\n </Button>\n </div>\n )}\n\n {!blob && code && (\n <SyntaxHighlighter\n showLineNumbers\n language={language}\n style={themeStyle}\n codeTagProps={codeTagProps}\n customStyle={customStyle}\n wrapLines\n >\n {code}\n </SyntaxHighlighter>\n )}\n </div>\n )\n}\n","import { Button, Tabs, TabsContent, TabsList, TabsTrigger } from '@motiadev/ui'\nimport { X } from 'lucide-react'\nimport { memo, useState } from 'react'\nimport { getResponseSelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration'\nimport { useStateStream } from '../hooks/use-state-stream'\nimport { ResponseCode } from './response-code'\nimport { ResponseContent } from './response-content'\n\ntype ActiveTab = 'preview' | 'headers'\n\nexport const SidePanelResponse = memo(() => {\n const { setResponse } = useEndpointConfiguration()\n const response = useEndpointConfiguration(getResponseSelector)\n const { data } = useStateStream(response?.body instanceof Blob ? undefined : response?.body)\n const [activeTab, setActiveTab] = useState<ActiveTab>('preview')\n const onClose = () => setResponse(undefined)\n\n if (!response) {\n return null\n }\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={(value: string) => setActiveTab(value as ActiveTab)}\n className=\"border-l border-border\"\n data-testid=\"endpoint-response-container\"\n >\n <div className=\"grid grid-cols-[1fr_auto] items-center h-10 border-b px-5 bg-card\">\n <TabsList>\n <TabsTrigger value=\"preview\" className=\"cursor-pointer\">\n Preview\n </TabsTrigger>\n <TabsTrigger value=\"headers\" className=\"grid grid-cols-[auto_auto] gap-2 items-center cursor-pointer\">\n Headers\n </TabsTrigger>\n </TabsList>\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose}>\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div className=\"sticky bottom-0 border-b border-border p-3 text-sm flex items-center gap-1 font-medium\">\n <div className=\"flex flex-row items-center flex-1 gap-3\">\n <ResponseCode statusCode={response.statusCode} />\n {!!response.executionTime && (\n <div className=\"text-muted-foreground bg-muted-foreground/10 px-2 py-1 rounded-sm\">\n {response.executionTime}ms\n </div>\n )}\n </div>\n </div>\n\n <TabsContent value=\"preview\">\n <ResponseContent\n code={data}\n blob={response?.body instanceof Blob ? response.body : undefined}\n contentType={response.headers['content-type']}\n />\n </TabsContent>\n\n <TabsContent value=\"headers\">\n <div className=\"grid grid-cols-[auto_minmax(0,1fr)] gap-4 p-4 overflow-auto auto-rows-max h-full\">\n {response.headers &&\n Object.entries(response.headers).map(([key, value]) => (\n <>\n <span className=\"font-bold text-sm h-8 items-center grid whitespace-nowrap\">{key}</span>\n <span className=\"text-sm text-muted-foreground h-8 items-center grid whitespace-nowrap\">{value}</span>\n </>\n ))}\n </div>\n </TabsContent>\n </Tabs>\n )\n})\n","import { Button } from '@motiadev/ui'\nimport { Loader2 } from 'lucide-react'\nimport { memo, useState } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport { getBodySelector, getHeadersSelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration'\nimport { usePathUrl } from '../hooks/use-path-url'\n\ntype TriggerButtonProps = {\n method: string\n path: string\n}\n\nexport const TriggerButton = memo(({ method, path }: TriggerButtonProps) => {\n const { setResponse } = useEndpointConfiguration()\n const headers = useEndpointConfiguration(useShallow(getHeadersSelector))\n const body = useEndpointConfiguration(useShallow(getBodySelector))\n const pathUrl = usePathUrl(path)\n\n const [isLoading, setIsLoading] = useState(false)\n\n const onClick = async () => {\n try {\n setIsLoading(true)\n\n const _headers = Object.values(headers)\n .filter((header) => header.active && header.name !== '' && header.value !== '')\n .reduce(\n (acc, header) => {\n acc[header.name.toLowerCase()] = header.value\n return acc\n },\n {} as Record<string, string>,\n )\n\n const startTime = Date.now()\n const response = await fetch(pathUrl, {\n method: method,\n headers: _headers,\n body: ['GET', 'DELETE', 'HEAD', 'OPTIONS'].includes(method) ? null : body,\n })\n\n setResponse(response, startTime)\n } catch (error) {\n console.error('Error triggering endpoint:', error)\n } finally {\n setIsLoading(false)\n }\n }\n\n return (\n <Button variant=\"accent\" size=\"sm\" onClick={onClick} disabled={isLoading} data-testid=\"endpoint-play-button\">\n {isLoading ? <Loader2 className=\"animate-spin\" /> : 'Send'}\n </Button>\n )\n})\n","import { BackgroundEffect, Badge, Button, cn, Tabs, TabsContent, TabsList, TabsTrigger } from '@motiadev/ui'\nimport { Book, X } from 'lucide-react'\nimport { type FC, memo, useState } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport { EndpointPath } from '../components/endpoint-path'\nimport {\n getHeadersSelector,\n getQueryParamsSelector,\n getResponseSelector,\n type UseEndpointConfiguration,\n useEndpointConfiguration,\n} from '../hooks/use-endpoint-configuration'\nimport { usePathParams } from '../hooks/use-path-params'\nimport { SpecSidePanel } from '../spec/spec-side-panel'\nimport type { ApiEndpoint } from '../types/endpoint'\nimport { SidePanelBodyTab } from './side-panel-body-tab'\nimport { SidePanelHeadersTab } from './side-panel-headers-tab'\nimport { SidePanelParamsTab } from './side-panel-params-tab'\nimport { SidePanelResponse } from './side-panel-response'\nimport { TriggerButton } from './trigger-button'\n\ntype EndpointSidePanelProps = { endpoint: ApiEndpoint; onClose: () => void }\n\ntype ActiveTab = 'body' | 'headers' | 'params'\n\nconst headersCountSelector = (state: UseEndpointConfiguration) => Object.keys(getHeadersSelector(state)).length\nconst hasResponseSelector = (state: UseEndpointConfiguration) => getResponseSelector(state) !== undefined\nconst paramsCountSelector = (state: UseEndpointConfiguration) => Object.keys(getQueryParamsSelector(state)).length\n\nexport const SidePanel: FC<EndpointSidePanelProps> = memo(({ endpoint, onClose }) => {\n const isGetOrDelete = endpoint.method === 'GET' || endpoint.method === 'DELETE'\n const [activeTab, setActiveTab] = useState<ActiveTab>(isGetOrDelete ? 'params' : 'body')\n const [isSpecOpen, setIsSpecOpen] = useState(false)\n const headersCount = useEndpointConfiguration(useShallow(headersCountSelector))\n const hasResponse = useEndpointConfiguration(useShallow(hasResponseSelector))\n const pathParamsCount = usePathParams(endpoint.path).length\n const queryParamsCount = useEndpointConfiguration(useShallow(paramsCountSelector))\n const paramsCount = queryParamsCount + pathParamsCount\n\n return (\n <div\n className=\"isolate grid grid-cols-1 overflow-y-auto min-w-0 grid-rows-[auto_1fr] border-l border-border\"\n data-testid=\"endpoint-details-panel\"\n >\n <BackgroundEffect />\n <div className=\"grid grid-cols-[1fr_1fr_auto] items-start gap-4 px-5 py-4 border-b bg-card w-full\">\n <div className=\"grid grid-rows-2 gap-2\">\n <EndpointPath method={endpoint.method} path={endpoint.path} />\n {endpoint.description && <p className=\"text-sm text-muted-foreground\">{endpoint.description}</p>}\n </div>\n <div className=\"flex items-end justify-end\">\n <Button\n variant=\"icon\"\n size=\"icon\"\n onClick={() => setIsSpecOpen(!isSpecOpen)}\n data-testid=\"endpoint-spec-button\"\n >\n <Book />\n </Button>\n </div>\n <Button variant=\"icon\" size=\"icon\" onClick={onClose}>\n <X />\n </Button>\n </div>\n <div className={cn('grid grid-cols-[minmax(380px,1fr)_minmax(auto,1fr)]', !hasResponse && 'grid-cols-1')}>\n <Tabs value={activeTab} onValueChange={(value: string) => setActiveTab(value as ActiveTab)}>\n <div className=\"grid grid-cols-[1fr_auto] items-center h-10 border-b px-5 bg-card\">\n <TabsList>\n <TabsTrigger\n value=\"params\"\n className=\"grid grid-cols-[auto_auto] gap-2 items-center cursor-pointer\"\n data-testid=\"endpoint-params-tab\"\n >\n Params\n <Badge variant=\"outline\" className=\"h-4 px-1.5 text-xs\">\n {paramsCount}\n </Badge>\n </TabsTrigger>\n <TabsTrigger value=\"body\" className=\"cursor-pointer\" data-testid=\"endpoint-body-tab\">\n Body\n </TabsTrigger>\n <TabsTrigger\n value=\"headers\"\n className=\"grid grid-cols-[auto_auto] gap-2 items-center cursor-pointer\"\n data-testid=\"endpoint-headers-tab\"\n >\n Headers\n <Badge variant=\"outline\" className=\"h-4 px-1.5 text-xs\">\n {headersCount}\n </Badge>\n </TabsTrigger>\n </TabsList>\n <TriggerButton method={endpoint.method} path={endpoint.path.toString()} />\n </div>\n\n <TabsContent value=\"params\">\n <SidePanelParamsTab path={endpoint.path} />\n </TabsContent>\n <TabsContent value=\"body\">\n <SidePanelBodyTab schema={endpoint.bodySchema} />\n </TabsContent>\n\n <TabsContent value=\"headers\">\n <SidePanelHeadersTab />\n </TabsContent>\n </Tabs>\n <SidePanelResponse />\n </div>\n\n {isSpecOpen && <SpecSidePanel endpoint={endpoint} onClose={() => setIsSpecOpen(false)} />}\n </div>\n )\n})\n","import { cn } from '@motiadev/ui'\nimport { useCallback, useMemo, useState } from 'react'\nimport { EndpointsSearch } from './components/endpoints-search'\nimport { FlowGroup } from './components/flow-group'\nimport { useEndpointConfiguration } from './hooks/use-endpoint-configuration'\nimport { useGetEndpoints } from './hooks/use-get-endpoints'\nimport { SidePanel } from './play/side-panel'\nimport type { ApiEndpoint } from './types/endpoint'\n\nexport const EndpointsPage = () => {\n const { endpoints, groupedEndpoints } = useGetEndpoints()\n const { selectedEndpointId, setSelectedEndpointId, toggleFlowGroupStatus, flowGroupStatus } =\n useEndpointConfiguration()\n const selectedEndpoint = useMemo(\n () => endpoints.find((endpoint: ApiEndpoint) => endpoint.id === selectedEndpointId),\n [endpoints, selectedEndpointId],\n )\n\n const onClose = useCallback(() => {\n setSelectedEndpointId('')\n }, [setSelectedEndpointId])\n\n const [search, setSearch] = useState('')\n\n const filteredEndpoints = useMemo(() => {\n return Object.entries(groupedEndpoints).filter(([_, endpoints]) => {\n return endpoints.some(\n (endpoint) =>\n endpoint.method?.toLowerCase().includes(search.toLowerCase()) ||\n endpoint.path?.toLowerCase().includes(search.toLowerCase()),\n )\n })\n }, [groupedEndpoints, search])\n\n return (\n <div\n className={cn('grid h-full max-h-full', selectedEndpoint ? 'grid-cols-[300px_1fr] ' : 'grid-cols-1')}\n data-testid=\"endpoints-list\"\n >\n <div className=\"grid grid-rows-[auto_1fr] h-full overflow-auto min-w-0\">\n <EndpointsSearch value={search} onChange={setSearch} onClear={() => setSearch('')} />\n <div className=\"grid grid-cols-1 auto-rows-max overflow-auto min-w-0\">\n {filteredEndpoints.map(([flow, endpoints]) => {\n const isSelected = endpoints.some((endpoint) => endpoint.id === selectedEndpointId)\n const isOpen = !flowGroupStatus[flow] || isSelected || search !== ''\n return (\n <FlowGroup\n key={flow}\n flow={flow}\n endpoints={endpoints as ApiEndpoint[]}\n isOpen={isOpen}\n isSelected={isSelected}\n onToggle={toggleFlowGroupStatus}\n onClearSelection={() => setSelectedEndpointId('')}\n selectedEndpointId={selectedEndpointId}\n onSelectEndpoint={setSelectedEndpointId}\n />\n )\n })}\n </div>\n </div>\n\n {selectedEndpoint && <SidePanel endpoint={selectedEndpoint} onClose={onClose} />}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["EndpointPath: FC<EndpointPathProps>","EndpointItem: FC<EndpointItemProps>","FlowGroup: FC<FlowGroupProps>","defaultHeaders: Headers","body: any","result: Record<string, any>","EndpointBodyPanel: FC<Props>","EndpointPathParamsPanel: FC<Props>","EndpointQueryParamsPanel: FC<Props>","EndpointResponseSchemaItem: FC<EndpointResponseItem>","EndpointResponseSchema: FC<EndpointResponseProps>","SpecSidePanel: FC<Props>","JsonEditor: FC<JsonEditorProps>","value","SidePanelBodyTab: FC<SidePanelBodyTabProps>","ConfigurationListItem: FC<ConfigurationListItemProps>","EndpointPathPreview: FC<EndpointPathPreviewProps>","statusMessages: Record<number, string>","ResponseCode: FC<ResponseCodeProps>","ResponseContent: React.FC<CodeDisplayProps>","SyntaxHighlighter","SidePanel: FC<EndpointSidePanelProps>","endpoints"],"sources":["../src/components/endpoints-search.tsx","../src/components/endpoint-badge.tsx","../src/components/endpoint-path.tsx","../src/components/endpoint-item.tsx","../src/components/flow-group.tsx","../src/hooks/use-endpoint-configuration.ts","../src/hooks/use-get-endpoints.ts","../src/hooks/use-path-params.ts","../src/hooks/utils.ts","../src/hooks/use-json-schema-to-json.tsx","../src/spec/spec-body-panel.tsx","../src/spec/spec-path-params-panel.tsx","../src/spec/spec-query-params-panel.tsx","../src/spec/spec-response-schema.tsx","../src/spec/spec-side-panel.tsx","../src/components/json-editor.tsx","../src/play/side-panel-body-tab.tsx","../src/components/configuration-list-item.tsx","../src/play/side-panel-headers-tab.tsx","../src/hooks/use-path-url.ts","../src/components/endpoint-path-preview.tsx","../src/play/side-panel-params-tab.tsx","../src/hooks/use-state-stream.ts","../src/play/reponse-code/utils.ts","../src/play/response-code.tsx","../src/play/response-content.tsx","../src/play/side-panel-response.tsx","../src/play/trigger-button.tsx","../src/play/side-panel.tsx","../src/endpoints-page.tsx"],"sourcesContent":["import { cn, Input } from '@motiadev/ui'\nimport { Search, X } from 'lucide-react'\n\ntype EndpointsSearchProps = {\n value: string\n onChange: (value: string) => void\n onClear: () => void\n}\n\nexport const EndpointsSearch = ({ value, onChange, onClear }: EndpointsSearchProps) => {\n return (\n <div className=\"p-2 border-b gap-4\" data-testid=\"endpoints-search-container\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50\" />\n <Input\n variant=\"shade\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"px-9! font-medium\"\n placeholder=\"Search by Method or Path\"\n />\n <X\n className={cn(\n 'cursor-pointer absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50 hover:text-muted-foreground',\n {\n visible: value !== '',\n invisible: value === '',\n },\n )}\n onClick={onClear}\n />\n </div>\n </div>\n )\n}\n","import { cn } from '@motiadev/ui'\nimport type * as React from 'react'\nimport { memo } from 'react'\nimport type { ApiRouteMethod } from '../types/endpoint'\n\nconst getMethodStyles = (method: ApiRouteMethod): string => {\n switch (method.toUpperCase()) {\n case 'POST':\n return 'bg-[#258DC3]/15 text-[#258DC3]'\n case 'GET':\n return 'bg-[#709A2D]/15 text-[#709A2D]'\n case 'DELETE':\n return 'bg-[#DE2134]/15 text-[#DE2134]'\n case 'PUT':\n return 'bg-[#B9922D]/15 text-[#B9922D]'\n case 'PATCH':\n return 'bg-[#B9922D]/15 text-[#B9922D]'\n case 'HEAD':\n return 'bg-[#E221DF]/15 text-[#E221DF]'\n case 'OPTIONS':\n return 'bg-[#B9922D]/15 text-[#B9922D]'\n default:\n return 'bg-[#258DC3]/15 text-[#258DC3]' // default to GET\n }\n}\n\ninterface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n variant: ApiRouteMethod\n}\n\nexport const EndpointBadge = memo(({ className, variant, ...props }: BadgeProps) => {\n const baseClasses = 'rounded-lg px-2 py-0.5 text-xs font-mono font-bold transition-colors'\n const methodClasses = getMethodStyles(variant)\n\n return <div className={cn(baseClasses, methodClasses, className)} {...props} />\n})\n","import { type FC, useMemo } from 'react'\nimport type { ApiRouteMethod } from '../types/endpoint'\nimport { EndpointBadge } from './endpoint-badge'\n\ninterface EndpointPathProps {\n method: string\n path: string\n}\n\nconst PathSeparator = () => {\n return <div className=\"text-muted-foreground\">/</div>\n}\n\nexport const EndpointPath: FC<EndpointPathProps> = ({ method, path }) => {\n const pathView = useMemo(() => {\n const parts = path.split('/').filter(Boolean)\n const partsLength = parts.length - 1\n return parts.flatMap((part, index) => {\n const isLast = index === partsLength\n const key = `part-${part}-${index}`\n const separator = isLast ? undefined : <PathSeparator key={`separator-${key}`} />\n\n if (part.startsWith(':')) {\n return [\n <div\n key={key}\n className=\"bg-[#2862FE]/20 text-[#2862FE] rounded-sm px-1 py-0.5 text-sm font-mono font-bold font-medium\"\n >\n {part}\n </div>,\n separator,\n ]\n }\n return [<div key={key}>{part}</div>, separator]\n })\n }, [path])\n\n return (\n <div className=\"grid grid-cols-[auto_1fr] gap-2 items-center\">\n <EndpointBadge variant={method as ApiRouteMethod}>{method}</EndpointBadge>\n <span className=\"font-mono font-bold whitespace-nowrap flex flex-row gap-2 items-center truncate\">\n <PathSeparator />\n {pathView}\n </span>\n </div>\n )\n}\n","import { cn } from '@motiadev/ui'\nimport type { FC } from 'react'\nimport type { ApiEndpoint } from '../types/endpoint'\nimport { EndpointPath } from './endpoint-path'\n\ntype EndpointItemProps = {\n endpoint: ApiEndpoint\n isSelected: boolean\n isLast: boolean\n onSelect: (id: string) => void\n}\n\nexport const EndpointItem: FC<EndpointItemProps> = ({ endpoint, isSelected, isLast, onSelect }) => (\n <div\n data-testid={`endpoint-${endpoint.method}-${endpoint.path}`}\n onClick={() => onSelect(endpoint.id)}\n className={cn(\n 'grid grid-cols-[auto_1fr] items-center justify-center px-[17px] select-none hover:bg-muted-foreground/10 cursor-pointer',\n isSelected && 'bg-muted-foreground/10',\n )}\n >\n {isLast ? (\n <svg width=\"14\" height=\"34\" viewBox=\"0 0 12 34\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.5 16.5C6.50006 19.2614 8.7386 21.4999 11.5 21.5C11.7759 21.5003 12 21.724 12 22C12 22.276 11.7759 22.4997 11.5 22.5C8.18632 22.4999 5.50006 19.8137 5.5 16.5V0H6.5V16.5Z\"\n className=\"fill-[#555]\"\n />\n </svg>\n ) : (\n <svg width=\"14\" height=\"34\" viewBox=\"0 0 12 34\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.5 0V11.5C6.50007 14.2614 8.73861 16.4999 11.5 16.5C11.7759 16.5003 12 16.724 12 17C12 17.276 11.7759 17.4997 11.5 17.5C9.41273 17.5 7.57486 16.4335 6.5 14.8164V34H5.5V0H6.5Z\"\n className=\"fill-[#555]\"\n />\n </svg>\n )}\n\n <div>\n <div className=\"grid grid-cols-[auto_1fr] items-center gap-3 px-2\">\n <EndpointPath method={endpoint.method} path={endpoint.path} />\n <span className=\"text-sm text-muted-foreground truncate\">{endpoint.description}</span>\n </div>\n </div>\n </div>\n)\n","import { cn } from '@motiadev/ui'\nimport { ChevronDown } from 'lucide-react'\nimport type { FC } from 'react'\nimport type { ApiEndpoint } from '../types/endpoint'\nimport { EndpointItem } from './endpoint-item'\n\ntype FlowGroupProps = {\n flow: string\n endpoints: ApiEndpoint[]\n isOpen: boolean\n isSelected: boolean\n onToggle: (flow: string) => void\n onClearSelection: () => void\n selectedEndpointId?: string\n onSelectEndpoint: (id: string) => void\n}\n\nexport const FlowGroup: FC<FlowGroupProps> = ({\n flow,\n endpoints,\n isOpen,\n isSelected,\n onToggle,\n onClearSelection,\n selectedEndpointId,\n onSelectEndpoint,\n}: FlowGroupProps) => {\n return (\n <div className=\"pt-2\">\n <button\n data-testid={`flow-group-${flow}`}\n className=\"w-full grid grid-cols-[auto_1fr] items-center gap-3 hover:bg-muted/40 cursor-pointer min-h-8.5 select-none hover:bg-muted-foreground/10 px-4\"\n onClick={() => {\n if (isSelected) {\n onClearSelection()\n }\n onToggle(flow)\n }}\n >\n <div className=\"grid grid-cols-1\">\n <ChevronDown\n className={cn('w-4 h-4 transition-transform duration-300 text-[#555]', { 'rotate-180 mt-2.5': isOpen })}\n strokeWidth={1.5}\n />\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"2\"\n height=\"10\"\n viewBox=\"0 0 2 10\"\n fill=\"none\"\n className={cn('ml-[7px]', { hidden: !isOpen })}\n >\n <path\n d=\"M1.5 1C1.5 0.723858 1.27614 0.5 1 0.5C0.723858 0.5 0.5 0.723858 0.5 1H1H1.5ZM1 1H0.5V10H1H1.5V1H1Z\"\n className=\"fill-[#555]\"\n />\n </svg>\n </div>\n <h3 className=\"text-sm font-medium text-left\">{flow}</h3>\n </button>\n\n <div className={cn('grid grid-cols-1 items-center justify-center', { hidden: !isOpen })}>\n {endpoints.map((endpoint: ApiEndpoint, index: number) => (\n <EndpointItem\n key={endpoint.id}\n endpoint={endpoint}\n isSelected={selectedEndpointId === endpoint.id}\n isLast={index === endpoints.length - 1}\n onSelect={onSelectEndpoint}\n />\n ))}\n </div>\n </div>\n )\n}\n","import { create } from 'zustand'\nimport { createJSONStorage, devtools, persist } from 'zustand/middleware'\n\nexport type ConfigurationLitItem = {\n name: string\n value: string\n active: boolean\n}\n\nexport type Headers = {\n [key: string]: ConfigurationLitItem\n}\n\nexport type Params = {\n [key: string]: ConfigurationLitItem\n}\n\nconst defaultHeaders: Headers = {\n CONTENT_TYPE: { name: 'Content-Type', value: 'application/json', active: true },\n USER_AGENT: { name: 'User-Agent', value: 'Motia/1.0', active: true },\n ACCEPT: { name: 'Accept', value: 'application/json', active: true },\n}\n\nexport type ResponseData = {\n headers: Record<string, string>\n body: Record<string, any>\n statusCode: number\n executionTime: number\n}\n\ntype Actions = {\n setResponse: (response: Response | undefined, startTime?: number) => void\n setHeaders: (headers: Headers) => void\n removeHeaders: (key: string) => void\n setBody: (body: string) => void\n setSelectedEndpointId: (selectedEndpointId: string | undefined) => void\n setQueryParams: (params: Params) => void\n removeQueryParams: (key: string) => void\n setPathParams: (pathParams: Params) => void\n removePathParams: (key: string) => void\n setBodyIsValid: (bodyIsValid: boolean) => void\n toggleFlowGroupStatus: (flow: string) => void\n}\n\ntype State = {\n selectedEndpointId: string\n headers: Record<string, Headers>\n body: Record<string, string>\n bodyIsValid: Record<string, boolean>\n response: Record<string, ResponseData | undefined>\n queryParams: Record<string, Params>\n pathParams: Record<string, Params>\n flowGroupStatus: Record<string, boolean>\n}\n\nexport type UseEndpointConfiguration = State & Actions\n\nexport const getHeadersSelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.headers[selectedEndpointId] || defaultHeaders\n }\n return defaultHeaders\n}\n\nexport const getBodyIsValidSelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.bodyIsValid[selectedEndpointId]\n }\n return true\n}\n\nexport const getBodySelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.body[selectedEndpointId] || ''\n }\n return ''\n}\n\nexport const getResponseSelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.response[selectedEndpointId] || undefined\n }\n return undefined\n}\n\nexport const getQueryParamsSelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.queryParams[selectedEndpointId] || {}\n }\n return {}\n}\n\nexport const getPathParamsSelector = (state: UseEndpointConfiguration) => {\n const selectedEndpointId = state.selectedEndpointId\n if (selectedEndpointId) {\n return state.pathParams[selectedEndpointId] || {}\n }\n return {}\n}\n\nexport const useEndpointConfiguration = create<UseEndpointConfiguration>()(\n persist(\n devtools((set) => ({\n selectedEndpointId: '',\n headers: {},\n body: {},\n bodyIsValid: {},\n response: {},\n queryParams: {},\n pathParams: {},\n flowGroupStatus: {},\n toggleFlowGroupStatus: (flow: string) =>\n set((state) => ({ flowGroupStatus: { ...state.flowGroupStatus, [flow]: !state.flowGroupStatus[flow] } })),\n setSelectedEndpointId: (selectedEndpointId: string) => set({ selectedEndpointId }),\n setQueryParams: (queryParams: Params) =>\n set((state) => ({ queryParams: { ...state.queryParams, [state.selectedEndpointId]: queryParams } })),\n removeQueryParams: (key: string) =>\n set((state) => {\n const newQueryParams = { ...state.queryParams[state.selectedEndpointId] }\n delete newQueryParams[key]\n return {\n queryParams: {\n ...state.queryParams,\n [state.selectedEndpointId]: newQueryParams,\n },\n }\n }),\n setPathParams: (pathParams: Params) =>\n set((state) => ({ pathParams: { ...state.pathParams, [state.selectedEndpointId]: pathParams } })),\n removePathParams: (key: string) =>\n set((state) => {\n const newPathParams = { ...state.pathParams[state.selectedEndpointId] }\n delete newPathParams[key]\n return {\n pathParams: {\n ...state.pathParams,\n [state.selectedEndpointId]: newPathParams,\n },\n }\n }),\n setHeaders: (headers: Headers) =>\n set((state) => ({ headers: { ...state.headers, [state.selectedEndpointId]: headers } })),\n setResponse: async (response: Response | undefined, startTime: number) => {\n if (!response) {\n set((state) => ({\n response: {\n ...state.response,\n [state.selectedEndpointId]: undefined,\n },\n }))\n return\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let body: any\n try {\n const contentType = response?.headers.get('content-type') ?? ''\n\n if (contentType.includes('text/')) {\n body = response ? await response.text() : undefined\n } else if (contentType.includes('application/json')) {\n body = response ? await response.json() : undefined\n } else {\n body = response ? await response.blob() : undefined\n // this is important to avoid the body being serialized to JSON\n body.toJSON = () => 'Preview not available'\n }\n } catch (error) {\n console.error('Error setting response:', error)\n }\n set((state) => ({\n response: {\n ...state.response,\n [state.selectedEndpointId]: {\n executionTime: Date.now() - startTime,\n statusCode: response?.status,\n headers: response?.headers ? Object.fromEntries(response.headers.entries()) : {},\n body: body,\n },\n },\n }))\n },\n setBody: (body: string) => set((state) => ({ body: { ...state.body, [state.selectedEndpointId]: body } })),\n removeHeaders: (key: string) =>\n set((state) => {\n const currentHeaders = state.headers[state.selectedEndpointId] || defaultHeaders\n const newHeaders = { ...currentHeaders }\n delete newHeaders[key]\n return {\n headers: {\n ...state.headers,\n [state.selectedEndpointId]: newHeaders,\n },\n }\n }),\n setBodyIsValid: (bodyIsValid: boolean) =>\n set((state) => ({ bodyIsValid: { ...state.bodyIsValid, [state.selectedEndpointId]: bodyIsValid } })),\n })),\n {\n name: 'motia-endpoint-configuration',\n storage: createJSONStorage(() => localStorage),\n },\n ),\n)\n","import { useStreamGroup } from '@motiadev/stream-client-react'\nimport { useMemo } from 'react'\nimport type { ApiEndpoint } from '../types/endpoint'\n\nexport const useGetEndpoints = () => {\n const { data: endpoints } = useStreamGroup<ApiEndpoint>({\n streamName: '__motia.api-endpoints',\n groupId: 'default',\n })\n\n const groupedEndpoints = useMemo(() => {\n return endpoints.reduce(\n (acc, endpoint) => {\n if (endpoint.flows && endpoint.flows.length > 0) {\n endpoint.flows.forEach((flow) => {\n acc[flow] = acc[flow] || []\n acc[flow].push(endpoint)\n })\n } else {\n acc['no-flow'] = acc['no-flow'] || []\n acc['no-flow'].push(endpoint)\n }\n return acc\n },\n {} as Record<string, ApiEndpoint[]>,\n )\n }, [endpoints])\n\n return { endpoints, groupedEndpoints }\n}\n","export const usePathParams = (path: string) => {\n const pathParams = path.match(/:(\\w+)/g)\n return pathParams?.map((param) => param.slice(1)) ?? []\n}\n","const resolveRef = (ref: string, rootSchema?: Record<string, any>): Record<string, any> | undefined => {\n if (!rootSchema || !ref.startsWith('#/$defs/')) {\n return undefined\n }\n\n const defName = ref.replace('#/$defs/', '')\n return rootSchema.$defs?.[defName]\n}\n\n/**\n * Converts a schema to a JSON object with default values\n * Supports both TypeScript step schemas (inline definitions) and Python step schemas ($defs/$ref)\n * @param schema - The schema to convert\n * @param rootSchema - Optional root schema containing $defs for $ref resolution. Defaults to schema if not provided.\n */\nexport const convertSchemaToJson = (schema?: Record<string, any>, rootSchema?: Record<string, any>): any => {\n if (!schema) return {}\n\n const effectiveRootSchema = rootSchema ?? schema\n\n if (schema.$ref) {\n const resolvedSchema = resolveRef(schema.$ref, effectiveRootSchema)\n if (resolvedSchema) {\n return convertSchemaToJson(resolvedSchema, effectiveRootSchema)\n }\n return {}\n }\n\n if (schema.anyOf && Array.isArray(schema.anyOf)) {\n const nonNullSchema = schema.anyOf.find((item: any) => item && item.type !== 'null')\n if (nonNullSchema) {\n return convertSchemaToJson(nonNullSchema, effectiveRootSchema)\n }\n return null\n }\n\n if (schema.type === 'object') {\n const result: Record<string, any> = {}\n\n if (schema.properties) {\n Object.entries(schema.properties).forEach(([key, value]: [string, any]) => {\n result[key] = convertSchemaToJson(value, effectiveRootSchema)\n })\n }\n\n return result\n }\n\n switch (schema.type) {\n case 'array':\n return schema.items ? [convertSchemaToJson(schema.items, effectiveRootSchema)] : []\n case 'string':\n return schema.enum?.[0] ?? schema.description ?? 'string'\n case 'number':\n return schema.description ?? 0\n case 'integer':\n return 0\n case 'boolean':\n return schema.description ?? false\n case 'null':\n return null\n default:\n return undefined\n }\n}\n","import { useEffect, useState } from 'react'\nimport { convertSchemaToJson } from './utils'\n\nexport const useJsonSchemaToJson = (schema: Record<string, any> | undefined) => {\n const [body, setBody] = useState<string>('')\n\n useEffect(() => {\n if (schema) {\n setBody(JSON.stringify(convertSchemaToJson(schema), null, 2))\n }\n }, [schema])\n\n return { body, setBody }\n}\n","import { Panel } from '@motiadev/ui'\nimport type { FC } from 'react'\nimport ReactJson from 'react18-json-view'\nimport 'react18-json-view/src/dark.css'\nimport 'react18-json-view/src/style.css'\nimport type { ApiEndpoint } from '../types/endpoint'\n\ntype Props = {\n endpoint: ApiEndpoint\n value: string\n panelName: string\n}\n\nexport const EndpointBodyPanel: FC<Props> = ({ endpoint, panelName, value }) => {\n const shouldHaveBody = ['post', 'put', 'patch'].includes(endpoint.method.toLowerCase())\n\n if (!shouldHaveBody) {\n return null\n }\n\n return (\n <Panel title=\"Body\" size=\"sm\" contentClassName=\"p-0\" data-testid={`endpoint-body-panel__${panelName}`}>\n <ReactJson\n src={value ? JSON.parse(value) : {}}\n theme=\"default\"\n enableClipboard={false}\n style={{ backgroundColor: 'transparent' }}\n />\n </Panel>\n )\n}\n","import { Panel } from '@motiadev/ui'\nimport type { FC } from 'react'\nimport { usePathParams } from '../hooks/use-path-params'\nimport type { ApiEndpoint } from '../types/endpoint'\n\ntype Props = {\n endpoint: ApiEndpoint\n}\n\nexport const EndpointPathParamsPanel: FC<Props> = ({ endpoint }) => {\n const pathParams = usePathParams(endpoint.path)\n\n if (!pathParams.length) {\n return null\n }\n\n return (\n <Panel title=\"Path params\" size=\"sm\" variant=\"default\">\n <div className=\"grid gap-3\" style={{ gridTemplateColumns: '1fr 2fr' }}>\n {pathParams.map((param: string) => (\n <div key={param} className=\"font-bold leading-[36px] flex text-xs\">\n {param}\n </div>\n ))}\n </div>\n </Panel>\n )\n}\n","import { Panel } from '@motiadev/ui'\nimport { type FC, Fragment } from 'react'\nimport type { ApiEndpoint } from '../types/endpoint'\n\ntype Props = {\n endpoint: ApiEndpoint\n}\n\nexport const EndpointQueryParamsPanel: FC<Props> = ({ endpoint }) => {\n if (!endpoint.queryParams?.length) {\n return null\n }\n\n return (\n <Panel title=\"Query params\" size=\"sm\" variant=\"outlined\">\n <div className=\"grid gap-3\" style={{ gridTemplateColumns: '1fr 2fr', gridTemplateRows: '1fr 1fr' }}>\n {endpoint.queryParams.map((param: { name: string; description: string }) => (\n <Fragment key={param.name}>\n <div className=\"font-bold leading-[36px] flex text-xs\">{param.name}</div>\n <div className=\"flex items-center text-xs \">\n <span>{param.description}</span>\n </div>\n </Fragment>\n ))}\n </div>\n </Panel>\n )\n}\n","import { Tabs, TabsContent, TabsList, TabsTrigger, useThemeStore } from '@motiadev/ui'\nimport { type FC, useMemo } from 'react'\nimport ReactJson from 'react18-json-view'\nimport { convertSchemaToJson } from '../hooks/utils'\n\nexport type EndpointResponseItem = {\n responseCode: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n bodySchema: Record<string, any>\n}\n\ntype EndpointResponseProps = {\n items: EndpointResponseItem[]\n}\n\nconst EndpointResponseSchemaItem: FC<EndpointResponseItem> = ({ responseCode, bodySchema }) => {\n const theme = useThemeStore((store: { theme: string }) => store.theme)\n const schema = useMemo(() => convertSchemaToJson(bodySchema), [bodySchema])\n const description = typeof bodySchema.description === 'string' ? bodySchema.description : ''\n\n return (\n <TabsContent value={responseCode} key={responseCode} className=\"border-t\">\n <div className=\"text-xs font-mono rounded-lg whitespace-pre-wrap\">\n {schema ? (\n <ReactJson\n src={schema}\n dark={theme === 'dark'}\n enableClipboard={false}\n style={{ backgroundColor: 'transparent' }}\n />\n ) : (\n <div className=\"text-xs font-mono rounded-lg whitespace-pre-wrap p-4\">{description}</div>\n )}\n </div>\n </TabsContent>\n )\n}\n\nexport const EndpointResponseSchema: FC<EndpointResponseProps> = ({ items }) => {\n if (items.length === 0) {\n return null\n }\n\n return (\n <div className=\"flex flex-col rounded-lg border\">\n <Tabs defaultValue={items[0].responseCode}>\n <div className=\"flex items-center justify-between bg-card\">\n <TabsList className=\"bg-transparent p-0\">\n {items.map((item) => (\n <TabsTrigger\n value={item.responseCode}\n key={item.responseCode}\n className=\"text-xs font-bold cursor-pointer\"\n >\n {item.responseCode}\n </TabsTrigger>\n ))}\n </TabsList>\n </div>\n\n {items.map((props) => (\n <EndpointResponseSchemaItem key={props.responseCode} {...props} />\n ))}\n </Tabs>\n </div>\n )\n}\n","import { Sidebar } from '@motiadev/ui'\nimport { X } from 'lucide-react'\nimport type { FC } from 'react'\nimport { EndpointPath } from '../components/endpoint-path'\nimport { useJsonSchemaToJson } from '../hooks/use-json-schema-to-json'\nimport type { ApiEndpoint } from '../types/endpoint'\nimport { EndpointBodyPanel } from './spec-body-panel'\nimport { EndpointPathParamsPanel } from './spec-path-params-panel'\nimport { EndpointQueryParamsPanel } from './spec-query-params-panel'\nimport { EndpointResponseSchema } from './spec-response-schema'\n\ntype Props = { endpoint: ApiEndpoint; onClose: () => void }\n\nexport const SpecSidePanel: FC<Props> = ({ endpoint, onClose }) => {\n const { body } = useJsonSchemaToJson(endpoint.bodySchema)\n\n return (\n <Sidebar\n initialWidth={600}\n subtitle={endpoint.description}\n title={<EndpointPath method={endpoint.method} path={endpoint.path} />}\n onClose={onClose}\n actions={[\n {\n icon: <X className=\"cursor-pointer w-4 h-4\" onClick={onClose} />,\n onClick: onClose,\n },\n ]}\n >\n <EndpointPathParamsPanel endpoint={endpoint} />\n <EndpointQueryParamsPanel endpoint={endpoint} />\n <EndpointBodyPanel endpoint={endpoint} panelName=\"details\" value={body} />\n <EndpointResponseSchema\n items={Object.entries(endpoint?.responseSchema ?? {}).map(([status, schema]) => ({\n responseCode: status,\n bodySchema: schema,\n }))}\n />\n </Sidebar>\n )\n}\n","import { Editor, useMonaco } from '@monaco-editor/react'\nimport { useThemeStore } from '@motiadev/ui'\nimport { type FC, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\ntype JsonEditorProps = {\n value: string\n schema?: Record<string, unknown>\n onChange?: (value: string) => void\n onValidate?: (isValid: boolean) => void\n language?: 'json' | string\n readOnly?: boolean\n}\n\nexport const JsonEditor: FC<JsonEditorProps> = ({\n value,\n schema,\n onChange,\n onValidate,\n language = 'json',\n readOnly = false,\n}) => {\n const monaco = useMonaco()\n const theme = useThemeStore((state: { theme: string }) => state.theme)\n const editorTheme = useMemo(() => (theme === 'dark' ? 'transparent-dark' : 'transparent-light'), [theme])\n const [editor, setEditor] = useState<any>(null)\n const resizeAnimationFrameRef = useRef<number | null>(null)\n const isValidatingRef = useRef(false)\n\n useLayoutEffect(() => {\n if (!monaco) return\n\n monaco.editor.defineTheme('transparent-light', {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n 'editor.lineHighlightBackground': '#00000000',\n 'editorLineNumber.foreground': '#999999',\n 'editorLineNumber.activeForeground': '#000000',\n focusBorder: '#00000000',\n 'widget.border': '#00000000',\n 'editor.border': '#00000000',\n 'editorWidget.border': '#00000000',\n },\n })\n monaco.editor.defineTheme('transparent-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n 'editor.lineHighlightBackground': '#00000000',\n 'editorLineNumber.foreground': '#666666',\n 'editorLineNumber.activeForeground': '#ffffff',\n focusBorder: '#00000000',\n 'widget.border': '#00000000',\n 'editor.border': '#00000000',\n 'editorWidget.border': '#00000000',\n },\n })\n }, [monaco])\n\n useEffect(() => {\n if (!monaco) return\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ isolatedModules: true })\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemas: schema\n ? [\n {\n uri: window.location.href,\n fileMatch: ['*'],\n schema,\n },\n ]\n : [],\n })\n }, [monaco, schema])\n\n useLayoutEffect(() => {\n if (!monaco) return\n monaco.editor.setTheme(editorTheme)\n }, [monaco, editorTheme])\n\n useEffect(() => {\n if (!editor) return\n\n const container = editor.getContainerDomNode().parentElement?.parentElement\n if (!container) return\n\n const handleResize = () => {\n if (resizeAnimationFrameRef.current !== null) {\n cancelAnimationFrame(resizeAnimationFrameRef.current)\n }\n\n resizeAnimationFrameRef.current = requestAnimationFrame(() => {\n const { width, height } = container.getBoundingClientRect()\n editor.layout({ width, height })\n resizeAnimationFrameRef.current = null\n })\n }\n\n handleResize()\n\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(container)\n\n return () => {\n resizeObserver.disconnect()\n if (resizeAnimationFrameRef.current !== null) {\n cancelAnimationFrame(resizeAnimationFrameRef.current)\n }\n }\n }, [editor])\n\n useEffect(() => {\n if (!editor || !monaco || !onValidate || isValidatingRef.current) return\n\n const model = editor.getModel()\n if (!model) return\n\n const isEmptyWithSchema = schema && !value\n if (isEmptyWithSchema) {\n isValidatingRef.current = true\n onValidate(false)\n isValidatingRef.current = false\n return\n }\n\n isValidatingRef.current = true\n const timeoutId = setTimeout(() => {\n const markers = monaco.editor.getModelMarkers({ resource: model.uri })\n const isValid = markers.length === 0\n onValidate(isValid)\n isValidatingRef.current = false\n }, 100)\n\n return () => {\n clearTimeout(timeoutId)\n isValidatingRef.current = false\n }\n }, [editor, monaco, onValidate, value, schema])\n\n const editorKey = useMemo(() => (schema ? JSON.stringify(schema) : 'no-schema'), [schema])\n\n return (\n <Editor\n key={editorKey}\n data-testid=\"json-editor\"\n language={language}\n value={value}\n loading=\"\"\n theme={editorTheme}\n onMount={setEditor}\n onChange={(value: string | undefined) => {\n onChange?.(value ?? '')\n }}\n onValidate={(markers: any[]) => {\n if (!onValidate || isValidatingRef.current) return\n isValidatingRef.current = true\n const isEmptyWithSchema = schema && !value\n if (isEmptyWithSchema) {\n onValidate(false)\n } else {\n onValidate(markers.length === 0)\n }\n isValidatingRef.current = false\n }}\n options={{\n automaticLayout: false,\n readOnly,\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n overviewRulerLanes: 0,\n }}\n />\n )\n}\n","import { CircleX } from 'lucide-react'\nimport { type FC, memo, useCallback, useEffect, useRef } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport { JsonEditor } from '../components/json-editor'\nimport { getBodyIsValidSelector, getBodySelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration'\nimport { convertSchemaToJson } from '../hooks/utils'\n\ntype SidePanelBodyTabProps = {\n schema: Record<string, any> | undefined\n}\n\nexport const SidePanelBodyTab: FC<SidePanelBodyTabProps> = memo(({ schema }) => {\n const { setBody, setBodyIsValid } = useEndpointConfiguration()\n const bodyIsValid = useEndpointConfiguration(useShallow(getBodyIsValidSelector))\n const body = useEndpointConfiguration(getBodySelector)\n const previousSchemaRef = useRef<Record<string, any> | undefined>(schema)\n const userClearedRef = useRef(false)\n\n useEffect(() => {\n const schemaChanged = previousSchemaRef.current !== schema\n previousSchemaRef.current = schema\n\n if (schemaChanged) {\n userClearedRef.current = false\n }\n\n if (schema && !body && !userClearedRef.current) {\n setBody(JSON.stringify(convertSchemaToJson(schema), null, 2))\n return\n }\n\n if (!schema) {\n setBody(body || '')\n setBodyIsValid(true)\n }\n }, [schema, body, setBody, setBodyIsValid])\n\n const handleBodyChange = useCallback(\n (value: string) => {\n setBody(value)\n const isEmptyWithSchema = schema && !value\n if (isEmptyWithSchema) {\n setBodyIsValid(false)\n userClearedRef.current = true\n } else {\n userClearedRef.current = false\n }\n },\n [setBody, schema, setBodyIsValid],\n )\n\n return (\n <div className=\"max-h-full h-full relative\">\n <JsonEditor value={body} schema={schema} onChange={handleBodyChange} onValidate={setBodyIsValid} />\n {bodyIsValid === false && (\n <div\n className=\"absolute bottom-0 left-0 right-0 border-t border-border p-3 text-sm dark:text-yellow-500 text-yellow-700 flex items-center gap-1 font-medium\"\n data-testid=\"endpoint-body-tab-invalid\"\n >\n <CircleX className=\"w-4 h-4\" />\n The body payload is invalid\n </div>\n )}\n </div>\n )\n})\n","import { Button, Checkbox, cn, Input } from '@motiadev/ui'\nimport { AlertCircle, Check, Trash2 } from 'lucide-react'\nimport { type FC, memo, useCallback, useRef, useState } from 'react'\nimport type { ConfigurationLitItem } from '../hooks/use-endpoint-configuration'\n\ninterface ConfigurationListItemProps {\n value: ConfigurationLitItem\n id: string\n onUpdate: (key: string, field: 'name' | 'value' | 'active', value: string | boolean) => void\n onRemove?: (key: string) => void\n required?: boolean\n}\n\nexport const ConfigurationListItem: FC<ConfigurationListItemProps> = memo(\n ({ value, id, onUpdate, onRemove, required = false }) => {\n const [activeConfiguration, setActiveConfiguration] = useState<string | null>(null)\n const [valueToDelete, setValueToDelete] = useState<string | null>(null)\n const deleteTimeout = useRef<NodeJS.Timeout | undefined>(undefined)\n const isActive = activeConfiguration === id\n\n const onDelete = useCallback(\n (key: string) => {\n clearTimeout(deleteTimeout.current)\n setValueToDelete(key)\n deleteTimeout.current = setTimeout(() => {\n setValueToDelete(null)\n }, 5000)\n },\n [setValueToDelete],\n )\n\n const onMouseOver = useCallback(() => {\n if (required) return\n setActiveConfiguration(id)\n }, [id, required])\n\n const onMouseLeave = useCallback(() => {\n if (required) return\n setActiveConfiguration(null)\n }, [required])\n\n return (\n <div\n className={cn(\n 'grid grid-cols-[auto_1fr_auto] items-center py-2 px-4 bg-muted/30 rounded-lg gap-2',\n isActive && 'bg-card',\n )}\n onMouseOver={onMouseOver}\n onMouseLeave={onMouseLeave}\n >\n <Checkbox\n checked={value.active}\n onCheckedChange={(checked: boolean) => onUpdate(id, 'active', checked)}\n disabled={required}\n >\n <Check className=\"h-3 w-3\" />\n </Checkbox>\n <div className=\"grid grid-cols-2 gap-2\">\n <Input\n readOnly={required}\n disabled={!value.active}\n variant={required ? 'outlineReadonly' : 'outline'}\n id={`name-${id}`}\n defaultValue={value.name}\n onBlur={(e: React.ChangeEvent<HTMLInputElement>) => onUpdate(id, 'name', e.target.value)}\n placeholder=\"Name\"\n className=\"h-8\"\n />\n <Input\n disabled={!value.active}\n variant={'outline'}\n id={`value-${id}`}\n defaultValue={value.value}\n onBlur={(e: React.FocusEvent<HTMLInputElement>) => onUpdate(id, 'value', e.target.value)}\n placeholder=\"Value\"\n className=\"h-8\"\n />\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => {\n if (valueToDelete === id) {\n onRemove?.(id)\n } else {\n onDelete(id)\n }\n }}\n className={cn('h-6 w-6 opacity-0 transition-opacity duration-200', isActive && 'opacity-100')}\n title={valueToDelete === id && isActive ? 'Click again to remove' : 'Remove'}\n >\n {valueToDelete === id ? <AlertCircle className=\"h-3 w-3 text-destructive\" /> : <Trash2 className=\"h-3 w-3\" />}\n </Button>\n </div>\n )\n },\n)\n","import { Button } from '@motiadev/ui'\nimport { Plus } from 'lucide-react'\nimport { useCallback } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport { ConfigurationListItem } from '../components/configuration-list-item'\nimport { getHeadersSelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration'\n\nexport const SidePanelHeadersTab = () => {\n const { setHeaders, removeHeaders } = useEndpointConfiguration()\n const headers = useEndpointConfiguration(useShallow(getHeadersSelector))\n\n const addHeader = useCallback(() => {\n const newHeader = {\n name: '',\n value: '',\n active: true,\n }\n setHeaders({ ...headers, [new Date().getTime().toString()]: newHeader })\n }, [headers, setHeaders])\n\n const updateHeader = useCallback(\n (key: string, field: 'name' | 'value' | 'active', value: string | boolean) => {\n if (!key) return\n setHeaders({ ...headers, [key]: { ...headers[key], [field]: value } })\n },\n [headers, setHeaders],\n )\n\n return (\n <div className=\"h-full max-h-full grid grid-rows-[auto_1fr]\">\n <div className=\"grid px-4 border-b h-10 items-center grid-cols-[auto_1fr]\">\n <Button size=\"sm\" onClick={addHeader}>\n <Plus className=\"h-3 w-3\" />\n Add\n </Button>\n </div>\n\n <div className=\"p-2\">\n {Object.entries(headers).map(([key, header]) => (\n <ConfigurationListItem key={key} value={header} id={key} onUpdate={updateHeader} onRemove={removeHeaders} />\n ))}\n\n {Object.entries(headers).length === 0 && (\n <div className=\"grid grid-cols-1 items-center h-full\">\n <div className=\"text-sm text-muted-foreground text-center\">There are no headers in this endpoint</div>\n </div>\n )}\n </div>\n </div>\n )\n}\n","import { useMemo } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport {\n getPathParamsSelector,\n getQueryParamsSelector,\n type UseEndpointConfiguration,\n useEndpointConfiguration,\n} from './use-endpoint-configuration'\n\nconst queryParamsSelector = (state: UseEndpointConfiguration) =>\n Object.values(getQueryParamsSelector(state)).filter(\n (param) => param.active && param.value !== '' && param.name !== '',\n )\n\nexport const usePathUrl = (path: string) => {\n const pathParams = useEndpointConfiguration(useShallow(getPathParamsSelector))\n const queryParams = useEndpointConfiguration(useShallow(queryParamsSelector))\n\n return useMemo(() => {\n const url = path.replace(/:(\\w+)/g, (match, p1) => {\n return pathParams[p1]?.value || match\n })\n return (\n url + (queryParams.length > 0 ? `?${queryParams.map((param) => `${param.name}=${param.value}`).join('&')}` : '')\n )\n }, [path, pathParams, queryParams])\n}\n","import { Button, cn } from '@motiadev/ui'\nimport { Check, Copy } from 'lucide-react'\nimport { type FC, useState } from 'react'\nimport { usePathUrl } from '../hooks/use-path-url'\n\ninterface EndpointPathPreviewProps {\n path: string\n baseUrl?: string\n}\n\nexport const EndpointPathPreview: FC<EndpointPathPreviewProps> = ({ path, baseUrl = window.location.origin }) => {\n const pathUrl = usePathUrl(path)\n const fullUrl = `${baseUrl}${pathUrl}`\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(fullUrl)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy URL:', err)\n }\n }\n\n return (\n <div className=\"grid grid-cols-[auto_1fr] items-center gap-5 px-5 relative border-b border-border\">\n <div className=\"text-sm font-medium py-2\">URL Preview</div>\n\n <div className=\"bg-muted-foreground/10 box-border grid grid-cols-[1fr_auto] gap-1 h-6 items-center px-2 py-1 rounded border border-border\">\n <div className=\"min-w-0\">\n <div className=\"font-medium text-xs text-muted-foreground truncate\" title={fullUrl}>\n {fullUrl}\n </div>\n </div>\n\n <Button\n onClick={handleCopy}\n className={cn(\n 'w-3 h-3 grid place-items-center transition-colors cursor-pointer',\n copied ? 'text-green-400' : 'text-muted-foreground',\n )}\n variant=\"icon\"\n size=\"sm\"\n aria-label=\"Copy URL\"\n >\n {copied ? <Check className=\"w-2.5 h-2.5\" /> : <Copy className=\"w-2.5 h-2.5\" />}\n </Button>\n </div>\n </div>\n )\n}\n","import { Button } from '@motiadev/ui'\nimport { Plus } from 'lucide-react'\nimport { useCallback, useMemo } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport { ConfigurationListItem } from '../components/configuration-list-item'\nimport { EndpointPathPreview } from '../components/endpoint-path-preview'\nimport {\n getPathParamsSelector,\n getQueryParamsSelector,\n useEndpointConfiguration,\n} from '../hooks/use-endpoint-configuration'\n\ntype SidePanelParamsTabProps = {\n path: string\n}\n\nexport const SidePanelParamsTab = ({ path }: SidePanelParamsTabProps) => {\n const { setQueryParams, removeQueryParams, setPathParams } = useEndpointConfiguration()\n const queryParams = useEndpointConfiguration(useShallow(getQueryParamsSelector))\n const pathParams = useEndpointConfiguration(useShallow(getPathParamsSelector))\n const pathParamsConfig = useMemo(() => {\n const params = path.match(/:(\\w+)/g)\n return (\n params?.map((param) => {\n return { name: param.slice(1), value: pathParams[param.slice(1)]?.value ?? '', active: true }\n }) ?? []\n )\n }, [path])\n\n const addParam = useCallback(() => {\n const newParam = {\n name: '',\n value: '',\n active: true,\n }\n setQueryParams({ ...queryParams, [new Date().getTime().toString()]: newParam })\n }, [queryParams, setQueryParams])\n\n const updateParam = useCallback(\n (key: string, field: 'name' | 'value' | 'active', value: string | boolean) => {\n if (!key) return\n setQueryParams({ ...queryParams, [key]: { ...queryParams[key], [field]: value } })\n },\n [queryParams, setQueryParams],\n )\n\n const updatePathParam = useCallback(\n (key: string, field: 'name' | 'value' | 'active', value: string | boolean) => {\n if (!key) return\n setPathParams({ ...pathParams, [key]: { ...pathParams[key], [field]: value } })\n },\n [pathParams, setPathParams],\n )\n\n return (\n <div className=\"h-full grid grid-rows-[auto_auto_1fr]\">\n <div className=\"grid px-4 border-b h-10 items-center grid-cols-[auto_1fr]\">\n <Button size=\"sm\" onClick={addParam}>\n <Plus className=\"h-3 w-3\" />\n Add\n </Button>\n </div>\n <EndpointPathPreview path={path} />\n\n <div className=\"grid grid-rows-[1fr_1fr]\">\n {pathParamsConfig.length > 0 && (\n <div className=\"p-2\">\n <div className=\"text-sm font-medium pl-3\">Path variables</div>\n {pathParamsConfig.map((pathName) => (\n <ConfigurationListItem\n key={pathName.name}\n value={{ name: pathName.name, value: pathName.value, active: pathName.active }}\n id={pathName.name}\n required={true}\n onUpdate={updatePathParam}\n />\n ))}\n </div>\n )}\n\n <div className=\"p-2 border-b border-border\">\n <div className=\"text-sm font-medium pl-3\">Query parameters</div>\n {Object.entries(queryParams).map(([key, param]) => (\n <ConfigurationListItem\n key={key}\n value={param}\n id={key}\n onUpdate={updateParam}\n onRemove={removeQueryParams}\n />\n ))}\n\n {Object.entries(queryParams).length === 0 && (\n <div className=\"grid grid-cols-1 items-center h-full\">\n <div className=\"text-sm text-muted-foreground text-center\">\n There are no query params in this endpoint\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import { useStreamItem } from '@motiadev/stream-client-react'\n\nexport const useStateStream = (object: Record<string, any> | undefined) => {\n const { __motia, ...rest } = typeof object === 'string' ? {} : object || {}\n const { data } = useStreamItem(__motia)\n const originalData = Array.isArray(object) ? object : rest || object\n\n if (typeof object === 'string') {\n return {\n data: object,\n originalData: object,\n isStreamed: false,\n }\n }\n\n return {\n data: JSON.stringify(data || originalData, null, 2),\n originalData,\n isStreamed: !!__motia,\n }\n}\n","const statusMessages: Record<number, string> = {\n // 1xx Informational\n 100: 'Continue',\n 101: 'Switching Protocols',\n 102: 'Processing',\n 103: 'Early Hints',\n\n // 2xx Success\n 200: 'OK',\n 201: 'Created',\n 202: 'Accepted',\n 203: 'Non-Authoritative Information',\n 204: 'No Content',\n 205: 'Reset Content',\n 206: 'Partial Content',\n 207: 'Multi-Status',\n 208: 'Already Reported',\n 226: 'IM Used',\n\n // 3xx Redirection\n 300: 'Multiple Choices',\n 301: 'Moved Permanently',\n 302: 'Found',\n 303: 'See Other',\n 304: 'Not Modified',\n 305: 'Use Proxy',\n 307: 'Temporary Redirect',\n 308: 'Permanent Redirect',\n\n // 4xx Client Error\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 402: 'Payment Required',\n 403: 'Forbidden',\n 404: 'Not Found',\n 405: 'Method Not Allowed',\n 406: 'Not Acceptable',\n 407: 'Proxy Authentication Required',\n 408: 'Request Timeout',\n 409: 'Conflict',\n 410: 'Gone',\n 411: 'Length Required',\n 412: 'Precondition Failed',\n 413: 'Payload Too Large',\n 414: 'URI Too Long',\n 415: 'Unsupported Media Type',\n 416: 'Range Not Satisfiable',\n 417: 'Expectation Failed',\n 418: \"I'm a teapot\",\n 421: 'Misdirected Request',\n 422: 'Unprocessable Entity',\n 423: 'Locked',\n 424: 'Failed Dependency',\n 425: 'Too Early',\n 426: 'Upgrade Required',\n 428: 'Precondition Required',\n 429: 'Too Many Requests',\n 431: 'Request Header Fields Too Large',\n 451: 'Unavailable For Legal Reasons',\n\n // 5xx Server Error\n 500: 'Internal Server Error',\n 501: 'Not Implemented',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n 504: 'Gateway Timeout',\n 505: 'HTTP Version Not Supported',\n 506: 'Variant Also Negotiates',\n 507: 'Insufficient Storage',\n 508: 'Loop Detected',\n 510: 'Not Extended',\n 511: 'Network Authentication Required',\n}\n\nexport const getStatusMessage = (statusCode: number) => {\n return statusMessages[statusCode] || 'Unknown'\n}\n","import { cn } from '@motiadev/ui'\nimport type { FC } from 'react'\nimport { getStatusMessage } from './reponse-code/utils'\n\ntype ResponseCodeProps = {\n statusCode: number\n}\n\nexport const ResponseCode: FC<ResponseCodeProps> = ({ statusCode }) => {\n const statusMessage = getStatusMessage(statusCode)\n const isSuccess = statusCode > 0 && statusCode < 400\n const isWarning = statusCode >= 400 && statusCode < 500\n const isError = statusCode >= 500\n\n return (\n <div\n className={cn(\n 'px-2 py-1 rounded-sm flex items-center gap-1',\n isWarning && 'dark:bg-[#EAB71F]/20 dark:text-[#EAB71F] bg-[#EAB71F] text-white',\n isError && 'dark:bg-[#F8367D]/20 dark:text-[#F8367D] bg-[#F8367D] text-white',\n isSuccess && 'dark:bg-accent-200 dark:text-primary bg-accent text-white',\n )}\n >\n <span className=\"font-bold font-mono\">{statusCode}</span> {statusMessage}\n </div>\n )\n}\n","import { Button, useThemeStore } from '@motiadev/ui'\nimport { Download } from 'lucide-react'\nimport type React from 'react'\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'\nimport { atomDark, oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism'\n\ntype CodeDisplayProps = {\n code: string\n blob: Blob | undefined\n contentType: string\n}\n\nconst codeTagProps = {\n style: {\n fontFamily: 'DM Mono, monospace',\n fontSize: '16px',\n },\n}\n\nconst customStyle = {\n margin: 0,\n borderRadius: 0,\n padding: 0,\n}\n\nconst useLanguage = (contentType: string) => {\n if (contentType?.includes('json')) {\n return 'json'\n }\n if (contentType?.includes('html')) {\n return 'html'\n }\n return 'text'\n}\n\nexport const ResponseContent: React.FC<CodeDisplayProps> = ({ code, blob, contentType }) => {\n const theme = useThemeStore((state) => state.theme)\n const themeStyle = theme === 'dark' ? atomDark : oneLight\n const language = useLanguage(contentType)\n\n const onDownload = () => {\n if (blob) {\n const url = URL.createObjectURL(blob)\n window.open(url, '_blank')\n }\n }\n\n return (\n <div className=\"flex flex-col h-full overflow-y-auto\">\n {blob && (\n <div className=\"flex p-8 justify-center\">\n <Button variant=\"default\" onClick={onDownload}>\n <Download className=\"h-4 w-4\" /> Download\n </Button>\n </div>\n )}\n\n {!blob && code && (\n <SyntaxHighlighter\n showLineNumbers\n language={language}\n style={themeStyle}\n codeTagProps={codeTagProps}\n customStyle={customStyle}\n wrapLines\n >\n {code}\n </SyntaxHighlighter>\n )}\n </div>\n )\n}\n","import { Button, Tabs, TabsContent, TabsList, TabsTrigger } from '@motiadev/ui'\nimport { X } from 'lucide-react'\nimport { memo, useState } from 'react'\nimport { getResponseSelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration'\nimport { useStateStream } from '../hooks/use-state-stream'\nimport { ResponseCode } from './response-code'\nimport { ResponseContent } from './response-content'\n\ntype ActiveTab = 'preview' | 'headers'\n\nexport const SidePanelResponse = memo(() => {\n const { setResponse } = useEndpointConfiguration()\n const response = useEndpointConfiguration(getResponseSelector)\n const { data } = useStateStream(response?.body instanceof Blob ? undefined : response?.body)\n const [activeTab, setActiveTab] = useState<ActiveTab>('preview')\n const onClose = () => setResponse(undefined)\n\n if (!response) {\n return null\n }\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={(value: string) => setActiveTab(value as ActiveTab)}\n className=\"border-l border-border\"\n data-testid=\"endpoint-response-container\"\n >\n <div className=\"grid grid-cols-[1fr_auto] items-center h-10 border-b px-5 bg-card\">\n <TabsList>\n <TabsTrigger value=\"preview\" className=\"cursor-pointer\">\n Preview\n </TabsTrigger>\n <TabsTrigger value=\"headers\" className=\"grid grid-cols-[auto_auto] gap-2 items-center cursor-pointer\">\n Headers\n </TabsTrigger>\n </TabsList>\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose}>\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div className=\"sticky bottom-0 border-b border-border p-3 text-sm flex items-center gap-1 font-medium\">\n <div className=\"flex flex-row items-center flex-1 gap-3\">\n <ResponseCode statusCode={response.statusCode} />\n {!!response.executionTime && (\n <div className=\"text-muted-foreground bg-muted-foreground/10 px-2 py-1 rounded-sm\">\n {response.executionTime}ms\n </div>\n )}\n </div>\n </div>\n\n <TabsContent value=\"preview\">\n <ResponseContent\n code={data}\n blob={response?.body instanceof Blob ? response.body : undefined}\n contentType={response.headers['content-type']}\n />\n </TabsContent>\n\n <TabsContent value=\"headers\">\n <div className=\"grid grid-cols-[auto_minmax(0,1fr)] gap-4 p-4 overflow-auto auto-rows-max h-full\">\n {response.headers &&\n Object.entries(response.headers).map(([key, value]) => (\n <>\n <span className=\"font-bold text-sm h-8 items-center grid whitespace-nowrap\">{key}</span>\n <span className=\"text-sm text-muted-foreground h-8 items-center grid whitespace-nowrap\">{value}</span>\n </>\n ))}\n </div>\n </TabsContent>\n </Tabs>\n )\n})\n","import { Button } from '@motiadev/ui'\nimport { Loader2 } from 'lucide-react'\nimport { memo, useState } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport { getBodySelector, getHeadersSelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration'\nimport { usePathUrl } from '../hooks/use-path-url'\n\ntype TriggerButtonProps = {\n method: string\n path: string\n}\n\nexport const TriggerButton = memo(({ method, path }: TriggerButtonProps) => {\n const { setResponse } = useEndpointConfiguration()\n const headers = useEndpointConfiguration(useShallow(getHeadersSelector))\n const body = useEndpointConfiguration(useShallow(getBodySelector))\n const pathUrl = usePathUrl(path)\n\n const [isLoading, setIsLoading] = useState(false)\n\n const onClick = async () => {\n try {\n setIsLoading(true)\n\n const _headers = Object.values(headers)\n .filter((header) => header.active && header.name !== '' && header.value !== '')\n .reduce(\n (acc, header) => {\n acc[header.name.toLowerCase()] = header.value\n return acc\n },\n {} as Record<string, string>,\n )\n\n const startTime = Date.now()\n const response = await fetch(pathUrl, {\n method: method,\n headers: _headers,\n body: ['GET', 'DELETE', 'HEAD', 'OPTIONS'].includes(method) ? null : body,\n })\n\n setResponse(response, startTime)\n } catch (error) {\n console.error('Error triggering endpoint:', error)\n } finally {\n setIsLoading(false)\n }\n }\n\n return (\n <Button variant=\"accent\" size=\"sm\" onClick={onClick} disabled={isLoading} data-testid=\"endpoint-play-button\">\n {isLoading ? <Loader2 className=\"animate-spin\" /> : 'Send'}\n </Button>\n )\n})\n","import { BackgroundEffect, Badge, Button, cn, Tabs, TabsContent, TabsList, TabsTrigger } from '@motiadev/ui'\nimport { Book, X } from 'lucide-react'\nimport { type FC, memo, useState } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\nimport { EndpointPath } from '../components/endpoint-path'\nimport {\n getHeadersSelector,\n getQueryParamsSelector,\n getResponseSelector,\n type UseEndpointConfiguration,\n useEndpointConfiguration,\n} from '../hooks/use-endpoint-configuration'\nimport { usePathParams } from '../hooks/use-path-params'\nimport { SpecSidePanel } from '../spec/spec-side-panel'\nimport type { ApiEndpoint } from '../types/endpoint'\nimport { SidePanelBodyTab } from './side-panel-body-tab'\nimport { SidePanelHeadersTab } from './side-panel-headers-tab'\nimport { SidePanelParamsTab } from './side-panel-params-tab'\nimport { SidePanelResponse } from './side-panel-response'\nimport { TriggerButton } from './trigger-button'\n\ntype EndpointSidePanelProps = { endpoint: ApiEndpoint; onClose: () => void }\n\ntype ActiveTab = 'body' | 'headers' | 'params'\n\nconst headersCountSelector = (state: UseEndpointConfiguration) => Object.keys(getHeadersSelector(state)).length\nconst hasResponseSelector = (state: UseEndpointConfiguration) => getResponseSelector(state) !== undefined\nconst paramsCountSelector = (state: UseEndpointConfiguration) => Object.keys(getQueryParamsSelector(state)).length\n\nexport const SidePanel: FC<EndpointSidePanelProps> = memo(({ endpoint, onClose }) => {\n const isGetOrDelete = endpoint.method === 'GET' || endpoint.method === 'DELETE'\n const [activeTab, setActiveTab] = useState<ActiveTab>(isGetOrDelete ? 'params' : 'body')\n const [isSpecOpen, setIsSpecOpen] = useState(false)\n const headersCount = useEndpointConfiguration(useShallow(headersCountSelector))\n const hasResponse = useEndpointConfiguration(useShallow(hasResponseSelector))\n const pathParamsCount = usePathParams(endpoint.path).length\n const queryParamsCount = useEndpointConfiguration(useShallow(paramsCountSelector))\n const paramsCount = queryParamsCount + pathParamsCount\n\n return (\n <div\n className=\"isolate grid grid-cols-1 overflow-y-auto min-w-0 grid-rows-[auto_1fr] border-l border-border\"\n data-testid=\"endpoint-details-panel\"\n >\n <BackgroundEffect />\n <div className=\"grid grid-cols-[1fr_1fr_auto] items-start gap-4 px-5 py-4 border-b bg-card w-full\">\n <div className=\"grid grid-rows-2 gap-2\">\n <EndpointPath method={endpoint.method} path={endpoint.path} />\n {endpoint.description && <p className=\"text-sm text-muted-foreground\">{endpoint.description}</p>}\n </div>\n <div className=\"flex items-end justify-end\">\n <Button\n variant=\"icon\"\n size=\"icon\"\n onClick={() => setIsSpecOpen(!isSpecOpen)}\n data-testid=\"endpoint-spec-button\"\n >\n <Book />\n </Button>\n </div>\n <Button variant=\"icon\" size=\"icon\" onClick={onClose}>\n <X />\n </Button>\n </div>\n <div className={cn('grid grid-cols-[minmax(380px,1fr)_minmax(auto,1fr)]', !hasResponse && 'grid-cols-1')}>\n <Tabs value={activeTab} onValueChange={(value: string) => setActiveTab(value as ActiveTab)}>\n <div className=\"grid grid-cols-[1fr_auto] items-center h-10 border-b px-5 bg-card\">\n <TabsList>\n <TabsTrigger\n value=\"params\"\n className=\"grid grid-cols-[auto_auto] gap-2 items-center cursor-pointer\"\n data-testid=\"endpoint-params-tab\"\n >\n Params\n <Badge variant=\"outline\" className=\"h-4 px-1.5 text-xs\">\n {paramsCount}\n </Badge>\n </TabsTrigger>\n <TabsTrigger value=\"body\" className=\"cursor-pointer\" data-testid=\"endpoint-body-tab\">\n Body\n </TabsTrigger>\n <TabsTrigger\n value=\"headers\"\n className=\"grid grid-cols-[auto_auto] gap-2 items-center cursor-pointer\"\n data-testid=\"endpoint-headers-tab\"\n >\n Headers\n <Badge variant=\"outline\" className=\"h-4 px-1.5 text-xs\">\n {headersCount}\n </Badge>\n </TabsTrigger>\n </TabsList>\n <TriggerButton method={endpoint.method} path={endpoint.path.toString()} />\n </div>\n\n <TabsContent value=\"params\">\n <SidePanelParamsTab path={endpoint.path} />\n </TabsContent>\n <TabsContent value=\"body\">\n <SidePanelBodyTab schema={endpoint.bodySchema} />\n </TabsContent>\n\n <TabsContent value=\"headers\">\n <SidePanelHeadersTab />\n </TabsContent>\n </Tabs>\n <SidePanelResponse />\n </div>\n\n {isSpecOpen && <SpecSidePanel endpoint={endpoint} onClose={() => setIsSpecOpen(false)} />}\n </div>\n )\n})\n","import { cn } from '@motiadev/ui'\nimport { useCallback, useMemo, useState } from 'react'\nimport { EndpointsSearch } from './components/endpoints-search'\nimport { FlowGroup } from './components/flow-group'\nimport { useEndpointConfiguration } from './hooks/use-endpoint-configuration'\nimport { useGetEndpoints } from './hooks/use-get-endpoints'\nimport { SidePanel } from './play/side-panel'\nimport type { ApiEndpoint } from './types/endpoint'\n\nexport const EndpointsPage = () => {\n const { endpoints, groupedEndpoints } = useGetEndpoints()\n const { selectedEndpointId, setSelectedEndpointId, toggleFlowGroupStatus, flowGroupStatus } =\n useEndpointConfiguration()\n const selectedEndpoint = useMemo(\n () => endpoints.find((endpoint: ApiEndpoint) => endpoint.id === selectedEndpointId),\n [endpoints, selectedEndpointId],\n )\n\n const onClose = useCallback(() => {\n setSelectedEndpointId('')\n }, [setSelectedEndpointId])\n\n const [search, setSearch] = useState('')\n\n const filteredEndpoints = useMemo(() => {\n return Object.entries(groupedEndpoints).filter(([_, endpoints]) => {\n return endpoints.some(\n (endpoint) =>\n endpoint.method?.toLowerCase().includes(search.toLowerCase()) ||\n endpoint.path?.toLowerCase().includes(search.toLowerCase()),\n )\n })\n }, [groupedEndpoints, search])\n\n return (\n <div\n className={cn('grid h-full max-h-full', selectedEndpoint ? 'grid-cols-[300px_1fr] ' : 'grid-cols-1')}\n data-testid=\"endpoints-list\"\n >\n <div className=\"grid grid-rows-[auto_1fr] h-full overflow-auto min-w-0\">\n <EndpointsSearch value={search} onChange={setSearch} onClear={() => setSearch('')} />\n <div className=\"grid grid-cols-1 auto-rows-max overflow-auto min-w-0\">\n {filteredEndpoints.map(([flow, endpoints]) => {\n const isSelected = endpoints.some((endpoint) => endpoint.id === selectedEndpointId)\n const isOpen = !flowGroupStatus[flow] || isSelected || search !== ''\n return (\n <FlowGroup\n key={flow}\n flow={flow}\n endpoints={endpoints as ApiEndpoint[]}\n isOpen={isOpen}\n isSelected={isSelected}\n onToggle={toggleFlowGroupStatus}\n onClearSelection={() => setSelectedEndpointId('')}\n selectedEndpointId={selectedEndpointId}\n onSelectEndpoint={setSelectedEndpointId}\n />\n )\n })}\n </div>\n </div>\n\n {selectedEndpoint && <SidePanel endpoint={selectedEndpoint} onClose={onClose} />}\n </div>\n )\n}\n"],"mappings":"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"}
|