Initial commit with Advoware proxy

This commit is contained in:
root
2025-10-19 14:57:07 +00:00
commit 273aa8b549
45771 changed files with 5534555 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Motia
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,34 @@
# @motiadev/plugin-endpoint
This package provides React components for the Motia workbench endpoint functionality.
## TailwindCSS Compilation
This package now includes TailwindCSS compilation to ensure all Tailwind classes used in the components are properly compiled and available.
### Build Process
The build process includes two steps:
1. **CSS Compilation**: Compiles `src/styles.css` using PostCSS and TailwindCSS
2. **TypeScript Compilation**: Compiles TypeScript files to JavaScript
### Usage
To use the compiled styles in consuming packages, import the CSS file:
```css
@import "@motiadev/plugin-endpoint/styles.css";
```
### Development
- `pnpm run build` - Build both CSS and TypeScript
- `pnpm run dev` - Watch mode for both CSS and TypeScript
- `pnpm run build:css` - Build only CSS
- `pnpm run dev:css` - Watch mode for CSS only
### Configuration Files
- `tailwind.config.js` - TailwindCSS configuration
- `postcss.config.js` - PostCSS configuration with TailwindCSS plugin
- `src/styles.css` - Main CSS entry point with Tailwind imports

View File

@@ -0,0 +1,12 @@
import { FC } from 'react';
import { ConfigurationLitItem } from '../hooks/use-endpoint-configuration';
interface ConfigurationListItemProps {
value: ConfigurationLitItem;
id: string;
onUpdate: (key: string, field: 'name' | 'value' | 'active', value: string | boolean) => void;
onRemove?: (key: string) => void;
required?: boolean;
}
export declare const ConfigurationListItem: FC<ConfigurationListItemProps>;
export {};
//# sourceMappingURL=configuration-list-item.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"configuration-list-item.d.ts","sourceRoot":"","sources":["../../src/components/configuration-list-item.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAuC,MAAM,OAAO,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,UAAU,0BAA0B;IAClC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,IAAI,CAAA;IAC5F,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAmFhE,CAAA"}

View File

@@ -0,0 +1,36 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { Button, Checkbox, cn, Input } from '@motiadev/ui';
import { AlertCircle, Check, Trash2 } from 'lucide-react';
import { memo, useCallback, useRef, useState } from 'react';
export const ConfigurationListItem = memo(({ value, id, onUpdate, onRemove, required = false }) => {
const [activeConfiguration, setActiveConfiguration] = useState(null);
const [valueToDelete, setValueToDelete] = useState(null);
const deleteTimeout = useRef(undefined);
const isActive = activeConfiguration === id;
const onDelete = useCallback((key) => {
clearTimeout(deleteTimeout.current);
setValueToDelete(key);
deleteTimeout.current = setTimeout(() => {
setValueToDelete(null);
}, 5000);
}, [setValueToDelete]);
const onMouseOver = useCallback(() => {
if (required)
return;
setActiveConfiguration(id);
}, [id, required]);
const onMouseLeave = useCallback(() => {
if (required)
return;
setActiveConfiguration(null);
}, [required]);
return (_jsxs("div", { className: cn('grid grid-cols-[auto_1fr_auto] items-center py-2 px-4 bg-muted/30 rounded-lg gap-2', isActive && 'bg-card'), onMouseOver: onMouseOver, onMouseLeave: onMouseLeave, children: [_jsx(Checkbox, { checked: value.active, onCheckedChange: (checked) => onUpdate(id, 'active', checked), disabled: required, children: _jsx(Check, { className: "h-3 w-3" }) }), _jsxs("div", { className: "grid grid-cols-2 gap-2", children: [_jsx(Input, { readOnly: required, disabled: !value.active, variant: required ? 'outlineReadonly' : 'outline', id: `name-${id}`, defaultValue: value.name, onBlur: (e) => onUpdate(id, 'name', e.target.value), placeholder: "Name", className: "h-8" }), _jsx(Input, { disabled: !value.active, variant: 'outline', id: `value-${id}`, defaultValue: value.value, onBlur: (e) => onUpdate(id, 'value', e.target.value), placeholder: "Value", className: "h-8" })] }), _jsx(Button, { variant: "ghost", size: "icon", onClick: () => {
if (valueToDelete === id) {
onRemove?.(id);
}
else {
onDelete(id);
}
}, className: cn('h-6 w-6 opacity-0 transition-opacity duration-200', isActive && 'opacity-100'), title: valueToDelete === id && isActive ? 'Click again to remove' : 'Remove', children: valueToDelete === id ? _jsx(AlertCircle, { className: "h-3 w-3 text-destructive" }) : _jsx(Trash2, { className: "h-3 w-3" }) })] }));
});
//# sourceMappingURL=configuration-list-item.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"configuration-list-item.js","sourceRoot":"","sources":["../../src/components/configuration-list-item.tsx"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,8 @@
import * as React from 'react';
import { ApiRouteMethod } from '../types/endpoint';
interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {
variant: ApiRouteMethod;
}
export declare const EndpointBadge: React.MemoExoticComponent<({ className, variant, ...props }: BadgeProps) => import("react/jsx-runtime").JSX.Element>;
export {};
//# sourceMappingURL=endpoint-badge.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoint-badge.d.ts","sourceRoot":"","sources":["../../src/components/endpoint-badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAuBlD,UAAU,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC/D,OAAO,EAAE,cAAc,CAAA;CACxB;AAED,eAAO,MAAM,aAAa,+DAA2C,UAAU,6CAK7E,CAAA"}

View File

@@ -0,0 +1,29 @@
import { jsx as _jsx } from "react/jsx-runtime";
import { cn } from '@motiadev/ui';
import { memo } from 'react';
const getMethodStyles = (method) => {
switch (method.toUpperCase()) {
case 'POST':
return 'bg-[#258DC3]/15 text-[#258DC3]';
case 'GET':
return 'bg-[#709A2D]/15 text-[#709A2D]';
case 'DELETE':
return 'bg-[#DE2134]/15 text-[#DE2134]';
case 'PUT':
return 'bg-[#B9922D]/15 text-[#B9922D]';
case 'PATCH':
return 'bg-[#B9922D]/15 text-[#B9922D]';
case 'HEAD':
return 'bg-[#E221DF]/15 text-[#E221DF]';
case 'OPTIONS':
return 'bg-[#B9922D]/15 text-[#B9922D]';
default:
return 'bg-[#258DC3]/15 text-[#258DC3]'; // default to GET
}
};
export const EndpointBadge = memo(({ className, variant, ...props }) => {
const baseClasses = 'rounded-lg px-2 py-0.5 text-xs font-mono font-bold transition-colors';
const methodClasses = getMethodStyles(variant);
return _jsx("div", { className: cn(baseClasses, methodClasses, className), ...props });
});
//# sourceMappingURL=endpoint-badge.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoint-badge.js","sourceRoot":"","sources":["../../src/components/endpoint-badge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAG5B,MAAM,eAAe,GAAG,CAAC,MAAsB,EAAU,EAAE;IACzD,QAAQ,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,KAAK,MAAM;YACT,OAAO,gCAAgC,CAAA;QACzC,KAAK,KAAK;YACR,OAAO,gCAAgC,CAAA;QACzC,KAAK,QAAQ;YACX,OAAO,gCAAgC,CAAA;QACzC,KAAK,KAAK;YACR,OAAO,gCAAgC,CAAA;QACzC,KAAK,OAAO;YACV,OAAO,gCAAgC,CAAA;QACzC,KAAK,MAAM;YACT,OAAO,gCAAgC,CAAA;QACzC,KAAK,SAAS;YACZ,OAAO,gCAAgC,CAAA;QACzC;YACE,OAAO,gCAAgC,CAAA,CAAC,iBAAiB;IAC7D,CAAC;AACH,CAAC,CAAA;AAMD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAc,EAAE,EAAE;IACjF,MAAM,WAAW,GAAG,sEAAsE,CAAA;IAC1F,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IAE9C,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACjF,CAAC,CAAC,CAAA"}

View File

@@ -0,0 +1,11 @@
import { FC } from 'react';
import { ApiEndpoint } from '../types/endpoint';
type EndpointItemProps = {
endpoint: ApiEndpoint;
isSelected: boolean;
isLast: boolean;
onSelect: (id: string) => void;
};
export declare const EndpointItem: FC<EndpointItemProps>;
export {};
//# sourceMappingURL=endpoint-item.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoint-item.d.ts","sourceRoot":"","sources":["../../src/components/endpoint-item.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,WAAW,CAAA;IACrB,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAgC9C,CAAA"}

View File

@@ -0,0 +1,5 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { cn } from '@motiadev/ui';
import { EndpointPath } from './endpoint-path';
export const EndpointItem = ({ endpoint, isSelected, isLast, onSelect }) => (_jsxs("div", { "data-testid": `endpoint-${endpoint.method}-${endpoint.path}`, onClick: () => onSelect(endpoint.id), className: cn('grid grid-cols-[auto_1fr] items-center justify-center px-[17px] select-none hover:bg-muted-foreground/10 cursor-pointer', isSelected && 'bg-muted-foreground/10'), children: [isLast ? (_jsx("svg", { width: "14", height: "34", viewBox: "0 0 12 34", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { 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", className: "fill-[#555]" }) })) : (_jsx("svg", { width: "14", height: "34", viewBox: "0 0 12 34", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { 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", className: "fill-[#555]" }) })), _jsx("div", { children: _jsxs("div", { className: "grid grid-cols-[auto_1fr] items-center gap-3 px-2", children: [_jsx(EndpointPath, { method: endpoint.method, path: endpoint.path }), _jsx("span", { className: "text-sm text-muted-foreground truncate", children: endpoint.description })] }) })] }));
//# sourceMappingURL=endpoint-item.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoint-item.js","sourceRoot":"","sources":["../../src/components/endpoint-item.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAS9C,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACjG,8BACe,YAAY,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,EAC3D,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EACpC,SAAS,EAAE,EAAE,CACX,yHAAyH,EACzH,UAAU,IAAI,wBAAwB,CACvC,aAEA,MAAM,CAAC,CAAC,CAAC,CACR,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B,YAC5F,eACE,CAAC,EAAC,6KAA6K,EAC/K,SAAS,EAAC,aAAa,GACvB,GACE,CACP,CAAC,CAAC,CAAC,CACF,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B,YAC5F,eACE,CAAC,EAAC,kLAAkL,EACpL,SAAS,EAAC,aAAa,GACvB,GACE,CACP,EAED,wBACE,eAAK,SAAS,EAAC,mDAAmD,aAChE,KAAC,YAAY,IAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAI,EAC9D,eAAM,SAAS,EAAC,wCAAwC,YAAE,QAAQ,CAAC,WAAW,GAAQ,IAClF,GACF,IACF,CACP,CAAA"}

View File

@@ -0,0 +1,8 @@
import { FC } from 'react';
interface EndpointPathPreviewProps {
path: string;
baseUrl?: string;
}
export declare const EndpointPathPreview: FC<EndpointPathPreviewProps>;
export {};
//# sourceMappingURL=endpoint-path-preview.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoint-path-preview.d.ts","sourceRoot":"","sources":["../../src/components/endpoint-path-preview.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAY,MAAM,OAAO,CAAA;AAGpC,UAAU,wBAAwB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CAyC5D,CAAA"}

View File

@@ -0,0 +1,22 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { Button, cn } from '@motiadev/ui';
import { Check, Copy } from 'lucide-react';
import { useState } from 'react';
import { usePathUrl } from '../hooks/use-path-url';
export const EndpointPathPreview = ({ path, baseUrl = window.location.origin }) => {
const pathUrl = usePathUrl(path);
const fullUrl = `${baseUrl}${pathUrl}`;
const [copied, setCopied] = useState(false);
const handleCopy = async () => {
try {
await navigator.clipboard.writeText(fullUrl);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
}
catch (err) {
console.error('Failed to copy URL:', err);
}
};
return (_jsxs("div", { className: "grid grid-cols-[auto_1fr] items-center gap-5 px-5 relative border-b border-border", children: [_jsx("div", { className: "text-sm font-medium py-2", children: "URL Preview" }), _jsxs("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", children: [_jsx("div", { className: "min-w-0", children: _jsx("div", { className: "font-medium text-xs text-muted-foreground truncate", title: fullUrl, children: fullUrl }) }), _jsx(Button, { onClick: handleCopy, className: cn('w-3 h-3 grid place-items-center transition-colors cursor-pointer', copied ? 'text-green-400' : 'text-muted-foreground'), variant: "icon", size: "small", "aria-label": "Copy URL", children: copied ? _jsx(Check, { className: "w-2.5 h-2.5" }) : _jsx(Copy, { className: "w-2.5 h-2.5" }) })] })] }));
};
//# sourceMappingURL=endpoint-path-preview.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoint-path-preview.js","sourceRoot":"","sources":["../../src/components/endpoint-path-preview.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAM,QAAQ,EAAE,MAAM,OAAO,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAOlD,MAAM,CAAC,MAAM,mBAAmB,GAAiC,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE;IAC9G,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,OAAO,GAAG,GAAG,OAAO,GAAG,OAAO,EAAE,CAAA;IACtC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE3C,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAC5C,SAAS,CAAC,IAAI,CAAC,CAAA;YACf,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,eAAK,SAAS,EAAC,mFAAmF,aAChG,cAAK,SAAS,EAAC,0BAA0B,4BAAkB,EAE3D,eAAK,SAAS,EAAC,2HAA2H,aACxI,cAAK,SAAS,EAAC,SAAS,YACtB,cAAK,SAAS,EAAC,oDAAoD,EAAC,KAAK,EAAE,OAAO,YAC/E,OAAO,GACJ,GACF,EAEN,KAAC,MAAM,IACL,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,EAAE,CACX,kEAAkE,EAClE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,uBAAuB,CACpD,EACD,OAAO,EAAC,MAAM,EACd,IAAI,EAAC,OAAO,gBACD,UAAU,YAEpB,MAAM,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,SAAS,EAAC,aAAa,GAAG,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,SAAS,EAAC,aAAa,GAAG,GACvE,IACL,IACF,CACP,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,8 @@
import { FC } from 'react';
interface EndpointPathProps {
method: string;
path: string;
}
export declare const EndpointPath: FC<EndpointPathProps>;
export {};
//# sourceMappingURL=endpoint-path.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoint-path.d.ts","sourceRoot":"","sources":["../../src/components/endpoint-path.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAW,MAAM,OAAO,CAAA;AAInC,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAMD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAiC9C,CAAA"}

View File

@@ -0,0 +1,26 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { useMemo } from 'react';
import { EndpointBadge } from './endpoint-badge';
const PathSeparator = () => {
return _jsx("div", { className: "text-muted-foreground", children: "/" });
};
export const EndpointPath = ({ method, path }) => {
const pathView = useMemo(() => {
const parts = path.split('/').filter(Boolean);
const partsLength = parts.length - 1;
return parts.flatMap((part, index) => {
const isLast = index === partsLength;
const key = `part-${part}-${index}`;
const separator = isLast ? undefined : _jsx(PathSeparator, {}, `separator-${key}`);
if (part.startsWith(':')) {
return [
_jsx("div", { className: "bg-[#2862FE]/20 text-[#2862FE] rounded-sm px-1 py-0.5 text-sm font-mono font-bold font-medium", children: part }, key),
separator,
];
}
return [_jsx("div", { children: part }, key), separator];
});
}, [path]);
return (_jsxs("div", { className: "grid grid-cols-[auto_1fr] gap-2 items-center", children: [_jsx(EndpointBadge, { variant: method, children: method }), _jsxs("span", { className: "font-mono font-bold whitespace-nowrap flex flex-row gap-2 items-center truncate", children: [_jsx(PathSeparator, {}), pathView] })] }));
};
//# sourceMappingURL=endpoint-path.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoint-path.js","sourceRoot":"","sources":["../../src/components/endpoint-path.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAM,OAAO,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAQhD,MAAM,aAAa,GAAG,GAAG,EAAE;IACzB,OAAO,cAAK,SAAS,EAAC,uBAAuB,kBAAQ,CAAA;AACvD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QACpC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACnC,MAAM,MAAM,GAAG,KAAK,KAAK,WAAW,CAAA;YACpC,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,KAAK,EAAE,CAAA;YACnC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAC,aAAa,MAAM,aAAa,GAAG,EAAE,CAAI,CAAA;YAEjF,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACL,cAEE,SAAS,EAAC,+FAA+F,YAExG,IAAI,IAHA,GAAG,CAIJ;oBACN,SAAS;iBACV,CAAA;YACH,CAAC;YACD,OAAO,CAAC,wBAAgB,IAAI,IAAV,GAAG,CAAc,EAAE,SAAS,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,OAAO,CACL,eAAK,SAAS,EAAC,8CAA8C,aAC3D,KAAC,aAAa,IAAC,OAAO,EAAE,MAAwB,YAAG,MAAM,GAAiB,EAC1E,gBAAM,SAAS,EAAC,iFAAiF,aAC/F,KAAC,aAAa,KAAG,EAChB,QAAQ,IACJ,IACH,CACP,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,8 @@
type EndpointsSearchProps = {
value: string;
onChange: (value: string) => void;
onClear: () => void;
};
export declare const EndpointsSearch: ({ value, onChange, onClear }: EndpointsSearchProps) => import("react/jsx-runtime").JSX.Element;
export {};
//# sourceMappingURL=endpoints-search.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoints-search.d.ts","sourceRoot":"","sources":["../../src/components/endpoints-search.tsx"],"names":[],"mappings":"AAGA,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,8BAA8B,oBAAoB,4CAyBjF,CAAA"}

View File

@@ -0,0 +1,10 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { cn, Input } from '@motiadev/ui';
import { Search, X } from 'lucide-react';
export const EndpointsSearch = ({ value, onChange, onClear }) => {
return (_jsx("div", { className: "p-2 border-b gap-4", "data-testid": "endpoints-search-container", children: _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50" }), _jsx(Input, { variant: "shade", value: value, onChange: (e) => onChange(e.target.value), className: "px-9 font-medium", placeholder: "Search by Method or Path" }), _jsx(X, { className: cn('cursor-pointer absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50 hover:text-muted-foreground', {
visible: value !== '',
invisible: value === '',
}), onClick: onClear })] }) }));
};
//# sourceMappingURL=endpoints-search.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoints-search.js","sourceRoot":"","sources":["../../src/components/endpoints-search.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAQxC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAwB,EAAE,EAAE;IACpF,OAAO,CACL,cAAK,SAAS,EAAC,oBAAoB,iBAAa,4BAA4B,YAC1E,eAAK,SAAS,EAAC,UAAU,aACvB,KAAC,MAAM,IAAC,SAAS,EAAC,2EAA2E,GAAG,EAChG,KAAC,KAAK,IACJ,OAAO,EAAC,OAAO,EACf,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,SAAS,EAAC,kBAAkB,EAC5B,WAAW,EAAC,0BAA0B,GACtC,EACF,KAAC,CAAC,IACA,SAAS,EAAE,EAAE,CACX,uHAAuH,EACvH;wBACE,OAAO,EAAE,KAAK,KAAK,EAAE;wBACrB,SAAS,EAAE,KAAK,KAAK,EAAE;qBACxB,CACF,EACD,OAAO,EAAE,OAAO,GAChB,IACE,GACF,CACP,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,15 @@
import { FC } from 'react';
import { ApiEndpoint } from '../types/endpoint';
type FlowGroupProps = {
flow: string;
endpoints: ApiEndpoint[];
isOpen: boolean;
isSelected: boolean;
onToggle: (flow: string) => void;
onClearSelection: () => void;
selectedEndpointId?: string;
onSelectEndpoint: (id: string) => void;
};
export declare const FlowGroup: FC<FlowGroupProps>;
export {};
//# sourceMappingURL=flow-group.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"flow-group.d.ts","sourceRoot":"","sources":["../../src/components/flow-group.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAyDxC,CAAA"}

View File

@@ -0,0 +1,13 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { cn } from '@motiadev/ui';
import { ChevronDown } from 'lucide-react';
import { EndpointItem } from './endpoint-item';
export const FlowGroup = ({ flow, endpoints, isOpen, isSelected, onToggle, onClearSelection, selectedEndpointId, onSelectEndpoint, }) => {
return (_jsxs("div", { className: "pt-2", children: [_jsxs("button", { "data-testid": `flow-group-${flow}`, 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", onClick: () => {
if (isSelected) {
onClearSelection();
}
onToggle(flow);
}, children: [_jsxs("div", { className: "grid grid-cols-1", children: [_jsx(ChevronDown, { className: cn('w-4 h-4 transition-transform duration-300 text-[#555]', { 'rotate-180 mt-2.5': isOpen }), strokeWidth: 1.5 }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "2", height: "10", viewBox: "0 0 2 10", fill: "none", className: cn('ml-[7px]', { hidden: !isOpen }), children: _jsx("path", { 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", className: "fill-[#555]" }) })] }), _jsx("h3", { className: "text-sm font-medium text-left", children: flow })] }), _jsx("div", { className: cn('grid grid-cols-1 items-center justify-center', { hidden: !isOpen }), children: endpoints.map((endpoint, index) => (_jsx(EndpointItem, { endpoint: endpoint, isSelected: selectedEndpointId === endpoint.id, isLast: index === endpoints.length - 1, onSelect: onSelectEndpoint }, endpoint.id))) })] }));
};
//# sourceMappingURL=flow-group.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"flow-group.js","sourceRoot":"","sources":["../../src/components/flow-group.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAa9C,MAAM,CAAC,MAAM,SAAS,GAAuB,CAAC,EAC5C,IAAI,EACJ,SAAS,EACT,MAAM,EACN,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,GACD,EAAE,EAAE;IACnB,OAAO,CACL,eAAK,SAAS,EAAC,MAAM,aACnB,iCACe,cAAc,IAAI,EAAE,EACjC,SAAS,EAAC,8IAA8I,EACxJ,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,UAAU,EAAE,CAAC;wBACf,gBAAgB,EAAE,CAAA;oBACpB,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAChB,CAAC,aAED,eAAK,SAAS,EAAC,kBAAkB,aAC/B,KAAC,WAAW,IACV,SAAS,EAAE,EAAE,CAAC,uDAAuD,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,EACvG,WAAW,EAAE,GAAG,GAChB,EACF,cACE,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAC,GAAG,EACT,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,UAAU,EAClB,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,YAE9C,eACE,CAAC,EAAC,oGAAoG,EACtG,SAAS,EAAC,aAAa,GACvB,GACE,IACF,EACN,aAAI,SAAS,EAAC,+BAA+B,YAAE,IAAI,GAAM,IAClD,EAET,cAAK,SAAS,EAAE,EAAE,CAAC,8CAA8C,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,YACpF,SAAS,CAAC,GAAG,CAAC,CAAC,QAAqB,EAAE,KAAa,EAAE,EAAE,CAAC,CACvD,KAAC,YAAY,IAEX,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,kBAAkB,KAAK,QAAQ,CAAC,EAAE,EAC9C,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EACtC,QAAQ,EAAE,gBAAgB,IAJrB,QAAQ,CAAC,EAAE,CAKhB,CACH,CAAC,GACE,IACF,CACP,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,12 @@
import { FC } from 'react';
type JsonEditorProps = {
value: string;
schema?: Record<string, unknown>;
onChange?: (value: string) => void;
onValidate?: (isValid: boolean) => void;
language?: 'json' | string;
readOnly?: boolean;
};
export declare const JsonEditor: FC<JsonEditorProps>;
export {};
//# sourceMappingURL=json-editor.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"json-editor.d.ts","sourceRoot":"","sources":["../../src/components/json-editor.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAwC,MAAM,OAAO,CAAA;AAEhE,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACvC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA4H1C,CAAA"}

View File

@@ -0,0 +1,105 @@
import { jsx as _jsx } from "react/jsx-runtime";
import { useThemeStore } from '@motiadev/ui';
import { Editor, useMonaco } from '@monaco-editor/react';
import { useEffect, useMemo, useRef, useState } from 'react';
export const JsonEditor = ({ value, schema, onChange, onValidate, language = 'json', readOnly = false, }) => {
const monaco = useMonaco();
const theme = useThemeStore((state) => state.theme);
const editorTheme = useMemo(() => (theme === 'dark' ? 'transparent-dark' : 'transparent-light'), [theme]);
const [editor, setEditor] = useState(null);
const resizeAnimationFrameRef = useRef(null);
useEffect(() => {
if (!monaco)
return;
monaco.editor.defineTheme('transparent-light', {
base: 'vs',
inherit: true,
rules: [],
colors: {
'editor.background': '#00000000',
'editor.lineHighlightBackground': '#00000000',
'editorLineNumber.foreground': '#999999',
'editorLineNumber.activeForeground': '#000000',
focusBorder: '#00000000',
'widget.border': '#00000000',
'editor.border': '#00000000',
'editorWidget.border': '#00000000',
},
});
monaco.editor.defineTheme('transparent-dark', {
base: 'vs-dark',
inherit: true,
rules: [],
colors: {
'editor.background': '#00000000',
'editor.lineHighlightBackground': '#00000000',
'editorLineNumber.foreground': '#666666',
'editorLineNumber.activeForeground': '#ffffff',
focusBorder: '#00000000',
'widget.border': '#00000000',
'editor.border': '#00000000',
'editorWidget.border': '#00000000',
},
});
}, [monaco]);
useEffect(() => {
if (!monaco)
return;
monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ isolatedModules: true });
monaco.languages.json.jsonDefaults.setDiagnosticsOptions({
schemas: schema
? [
{
uri: window.location.href,
fileMatch: ['*'],
schema,
},
]
: [],
});
}, [monaco, schema]);
useEffect(() => {
if (!monaco)
return;
monaco.editor.setTheme(editorTheme);
}, [monaco, editorTheme]);
useEffect(() => {
if (!editor)
return;
const container = editor.getContainerDomNode().parentElement?.parentElement;
if (!container)
return;
const handleResize = () => {
if (resizeAnimationFrameRef.current !== null) {
cancelAnimationFrame(resizeAnimationFrameRef.current);
}
resizeAnimationFrameRef.current = requestAnimationFrame(() => {
const { width, height } = container.getBoundingClientRect();
editor.layout({ width, height });
resizeAnimationFrameRef.current = null;
});
};
handleResize();
const resizeObserver = new ResizeObserver(handleResize);
resizeObserver.observe(container);
return () => {
resizeObserver.disconnect();
if (resizeAnimationFrameRef.current !== null) {
cancelAnimationFrame(resizeAnimationFrameRef.current);
}
};
}, [editor]);
return (_jsx(Editor, { "data-testid": "json-editor", language: language, value: value, theme: editorTheme, onMount: setEditor, onChange: (value) => {
if (!value) {
onValidate?.(false);
}
onChange?.(value ?? '');
}, onValidate: (markers) => onValidate?.(markers.length === 0), options: {
automaticLayout: false,
readOnly,
scrollBeyondLastLine: false,
minimap: { enabled: false },
overviewRulerLanes: 0,
} }));
};
//# sourceMappingURL=json-editor.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"json-editor.js","sourceRoot":"","sources":["../../src/components/json-editor.tsx"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,2 @@
export declare const EndpointsPage: () => import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=endpoints-page.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoints-page.d.ts","sourceRoot":"","sources":["../src/endpoints-page.tsx"],"names":[],"mappings":"AASA,eAAO,MAAM,aAAa,+CAwDzB,CAAA"}

View File

@@ -0,0 +1,29 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { cn } from '@motiadev/ui';
import { useCallback, useMemo, useState } from 'react';
import { EndpointsSearch } from './components/endpoints-search';
import { FlowGroup } from './components/flow-group';
import { useEndpointConfiguration } from './hooks/use-endpoint-configuration';
import { useGetEndpoints } from './hooks/use-get-endpoints';
import { SidePanel } from './play/side-panel';
export const EndpointsPage = () => {
const { endpoints, groupedEndpoints } = useGetEndpoints();
const { selectedEndpointId, setSelectedEndpointId, toggleFlowGroupStatus, flowGroupStatus } = useEndpointConfiguration();
const selectedEndpoint = useMemo(() => endpoints.find((endpoint) => endpoint.id === selectedEndpointId), [endpoints, selectedEndpointId]);
const onClose = useCallback(() => {
setSelectedEndpointId('');
}, [setSelectedEndpointId]);
const [search, setSearch] = useState('');
const filteredEndpoints = useMemo(() => {
return Object.entries(groupedEndpoints).filter(([_, endpoints]) => {
return endpoints.some((endpoint) => endpoint.method?.toLowerCase().includes(search.toLowerCase()) ||
endpoint.path?.toLowerCase().includes(search.toLowerCase()));
});
}, [groupedEndpoints, search]);
return (_jsxs("div", { className: cn('grid h-full max-h-full', selectedEndpoint ? 'grid-cols-[300px_1fr] ' : 'grid-cols-1'), "data-testid": "endpoints-list", children: [_jsxs("div", { className: "grid grid-rows-[auto_1fr] h-full overflow-auto min-w-0", children: [_jsx(EndpointsSearch, { value: search, onChange: setSearch, onClear: () => setSearch('') }), _jsx("div", { className: "grid grid-cols-1 auto-rows-max overflow-auto min-w-0", children: filteredEndpoints.map(([flow, endpoints]) => {
const isSelected = endpoints.some((endpoint) => endpoint.id === selectedEndpointId);
const isOpen = !flowGroupStatus[flow] || isSelected || search !== '';
return (_jsx(FlowGroup, { flow: flow, endpoints: endpoints, isOpen: isOpen, isSelected: isSelected, onToggle: toggleFlowGroupStatus, onClearSelection: () => setSelectedEndpointId(''), selectedEndpointId: selectedEndpointId, onSelectEndpoint: setSelectedEndpointId }, flow));
}) })] }), selectedEndpoint && _jsx(SidePanel, { endpoint: selectedEndpoint, onClose: onClose })] }));
};
//# sourceMappingURL=endpoints-page.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"endpoints-page.js","sourceRoot":"","sources":["../src/endpoints-page.tsx"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,78 @@
export type ConfigurationLitItem = {
name: string;
value: string;
active: boolean;
};
export type Headers = {
[key: string]: ConfigurationLitItem;
};
export type Params = {
[key: string]: ConfigurationLitItem;
};
export type ResponseData = {
headers: Record<string, string>;
body: Record<string, any>;
statusCode: number;
executionTime: number;
};
type Actions = {
setResponse: (response: Response | undefined, startTime?: number) => void;
setHeaders: (headers: Headers) => void;
removeHeaders: (key: string) => void;
setBody: (body: string) => void;
setSelectedEndpointId: (selectedEndpointId: string | undefined) => void;
setQueryParams: (params: Params) => void;
removeQueryParams: (key: string) => void;
setPathParams: (pathParams: Params) => void;
removePathParams: (key: string) => void;
setBodyIsValid: (bodyIsValid: boolean) => void;
toggleFlowGroupStatus: (flow: string) => void;
};
type State = {
selectedEndpointId: string;
headers: Record<string, Headers>;
body: Record<string, string>;
bodyIsValid: Record<string, boolean>;
response: Record<string, ResponseData | undefined>;
queryParams: Record<string, Params>;
pathParams: Record<string, Params>;
flowGroupStatus: Record<string, boolean>;
};
export type UseEndpointConfiguration = State & Actions;
export declare const getHeadersSelector: (state: UseEndpointConfiguration) => Headers;
export declare const getBodyIsValidSelector: (state: UseEndpointConfiguration) => boolean;
export declare const getBodySelector: (state: UseEndpointConfiguration) => string;
export declare const getResponseSelector: (state: UseEndpointConfiguration) => ResponseData | undefined;
export declare const getQueryParamsSelector: (state: UseEndpointConfiguration) => Params;
export declare const getPathParamsSelector: (state: UseEndpointConfiguration) => Params;
export declare const useEndpointConfiguration: import("zustand").UseBoundStore<Omit<Omit<import("zustand").StoreApi<UseEndpointConfiguration>, "setState" | "persist"> & {
setState(partial: UseEndpointConfiguration | Partial<UseEndpointConfiguration> | ((state: UseEndpointConfiguration) => UseEndpointConfiguration | Partial<UseEndpointConfiguration>), replace?: false | undefined): unknown;
setState(state: UseEndpointConfiguration | ((state: UseEndpointConfiguration) => UseEndpointConfiguration), replace: true): unknown;
persist: {
setOptions: (options: Partial<import("zustand/middleware").PersistOptions<UseEndpointConfiguration, unknown, unknown>>) => void;
clearStorage: () => void;
rehydrate: () => Promise<void> | void;
hasHydrated: () => boolean;
onHydrate: (fn: (state: UseEndpointConfiguration) => void) => () => void;
onFinishHydration: (fn: (state: UseEndpointConfiguration) => void) => () => void;
getOptions: () => Partial<import("zustand/middleware").PersistOptions<UseEndpointConfiguration, unknown, unknown>>;
};
}, "setState" | "devtools"> & {
setState(partial: UseEndpointConfiguration | Partial<UseEndpointConfiguration> | ((state: UseEndpointConfiguration) => UseEndpointConfiguration | Partial<UseEndpointConfiguration>), replace?: false | undefined, action?: (string | {
[x: string]: unknown;
[x: number]: unknown;
[x: symbol]: unknown;
type: string;
}) | undefined): unknown;
setState(state: UseEndpointConfiguration | ((state: UseEndpointConfiguration) => UseEndpointConfiguration), replace: true, action?: (string | {
[x: string]: unknown;
[x: number]: unknown;
[x: symbol]: unknown;
type: string;
}) | undefined): unknown;
devtools: {
cleanup: () => void;
};
}>;
export {};
//# sourceMappingURL=use-endpoint-configuration.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-endpoint-configuration.d.ts","sourceRoot":"","sources":["../../src/hooks/use-endpoint-configuration.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAAA;CACpC,CAAA;AAQD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,OAAO,GAAG;IACb,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACzE,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,qBAAqB,EAAE,CAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IACvE,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9C,qBAAqB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C,CAAA;AAED,KAAK,KAAK,GAAG;IACX,kBAAkB,EAAE,MAAM,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC,CAAA;IAClD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACzC,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,KAAK,GAAG,OAAO,CAAA;AAEtD,eAAO,MAAM,kBAAkB,GAAI,OAAO,wBAAwB,YAMjE,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,OAAO,wBAAwB,YAMrE,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,wBAAwB,WAM9D,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,wBAAwB,6BAMlE,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,OAAO,wBAAwB,WAMrE,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,OAAO,wBAAwB,WAMpE,CAAA;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2FpC,CAAA"}

View File

@@ -0,0 +1,130 @@
import { create } from 'zustand';
import { createJSONStorage, devtools, persist } from 'zustand/middleware';
const defaultHeaders = {
CONTENT_TYPE: { name: 'Content-Type', value: 'application/json', active: true },
USER_AGENT: { name: 'User-Agent', value: 'Motia/1.0', active: true },
ACCEPT: { name: 'Accept', value: 'application/json', active: true },
};
export const getHeadersSelector = (state) => {
const selectedEndpointId = state.selectedEndpointId;
if (selectedEndpointId) {
return state.headers[selectedEndpointId] || defaultHeaders;
}
return defaultHeaders;
};
export const getBodyIsValidSelector = (state) => {
const selectedEndpointId = state.selectedEndpointId;
if (selectedEndpointId) {
return state.bodyIsValid[selectedEndpointId];
}
return true;
};
export const getBodySelector = (state) => {
const selectedEndpointId = state.selectedEndpointId;
if (selectedEndpointId) {
return state.body[selectedEndpointId] || '';
}
return '';
};
export const getResponseSelector = (state) => {
const selectedEndpointId = state.selectedEndpointId;
if (selectedEndpointId) {
return state.response[selectedEndpointId] || undefined;
}
return undefined;
};
export const getQueryParamsSelector = (state) => {
const selectedEndpointId = state.selectedEndpointId;
if (selectedEndpointId) {
return state.queryParams[selectedEndpointId] || {};
}
return {};
};
export const getPathParamsSelector = (state) => {
const selectedEndpointId = state.selectedEndpointId;
if (selectedEndpointId) {
return state.pathParams[selectedEndpointId] || {};
}
return {};
};
export const useEndpointConfiguration = create()(persist(devtools((set) => ({
selectedEndpointId: '',
headers: {},
body: {},
bodyIsValid: {},
response: {},
queryParams: {},
pathParams: {},
flowGroupStatus: {},
toggleFlowGroupStatus: (flow) => set((state) => ({ flowGroupStatus: { ...state.flowGroupStatus, [flow]: !state.flowGroupStatus[flow] } })),
setSelectedEndpointId: (selectedEndpointId) => set({ selectedEndpointId }),
setQueryParams: (queryParams) => set((state) => ({ queryParams: { ...state.queryParams, [state.selectedEndpointId]: queryParams } })),
removeQueryParams: (key) => set((state) => {
const newQueryParams = { ...state.queryParams[state.selectedEndpointId] };
delete newQueryParams[key];
return {
queryParams: {
...state.queryParams,
[state.selectedEndpointId]: newQueryParams,
},
};
}),
setPathParams: (pathParams) => set((state) => ({ pathParams: { ...state.pathParams, [state.selectedEndpointId]: pathParams } })),
removePathParams: (key) => set((state) => {
const newPathParams = { ...state.pathParams[state.selectedEndpointId] };
delete newPathParams[key];
return {
pathParams: {
...state.pathParams,
[state.selectedEndpointId]: newPathParams,
},
};
}),
setHeaders: (headers) => set((state) => ({ headers: { ...state.headers, [state.selectedEndpointId]: headers } })),
setResponse: async (response, startTime) => {
if (!response) {
set((state) => ({
response: {
...state.response,
[state.selectedEndpointId]: undefined,
},
}));
return;
}
let body = undefined;
try {
body = response ? await response.json() : undefined;
}
catch (error) {
console.error('Error setting response:', error);
}
set((state) => ({
response: {
...state.response,
[state.selectedEndpointId]: {
executionTime: Date.now() - startTime,
statusCode: response?.status,
headers: response?.headers ? Object.fromEntries(response.headers.entries()) : {},
body: body,
},
},
}));
},
setBody: (body) => set((state) => ({ body: { ...state.body, [state.selectedEndpointId]: body } })),
removeHeaders: (key) => set((state) => {
const currentHeaders = state.headers[state.selectedEndpointId] || defaultHeaders;
const newHeaders = { ...currentHeaders };
delete newHeaders[key];
return {
headers: {
...state.headers,
[state.selectedEndpointId]: newHeaders,
},
};
}),
setBodyIsValid: (bodyIsValid) => set((state) => ({ bodyIsValid: { ...state.bodyIsValid, [state.selectedEndpointId]: bodyIsValid } })),
})), {
name: 'motia-endpoint-configuration',
storage: createJSONStorage(() => localStorage),
}));
//# sourceMappingURL=use-endpoint-configuration.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
import { ApiEndpoint } from '../types/endpoint';
export declare const useGetEndpoints: () => {
endpoints: ApiEndpoint[];
groupedEndpoints: Record<string, ApiEndpoint[]>;
};
//# sourceMappingURL=use-get-endpoints.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-get-endpoints.d.ts","sourceRoot":"","sources":["../../src/hooks/use-get-endpoints.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,eAAO,MAAM,eAAe;;;CAyB3B,CAAA"}

View File

@@ -0,0 +1,23 @@
import { useStreamGroup } from '@motiadev/stream-client-react';
import { useMemo } from 'react';
export const useGetEndpoints = () => {
const { data: endpoints } = useStreamGroup({
streamName: '__motia.api-endpoints',
groupId: 'default',
});
const groupedEndpoints = useMemo(() => {
return endpoints.reduce((acc, endpoint) => {
endpoint.flows?.forEach((flow) => {
acc[flow] = acc[flow] || [];
acc[flow].push(endpoint);
});
if (endpoint.flows?.length == 0) {
acc['no-flow'] = acc['no-flow'] || [];
acc['no-flow'].push(endpoint);
}
return acc;
}, {});
}, [endpoints]);
return { endpoints, groupedEndpoints };
};
//# sourceMappingURL=use-get-endpoints.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-get-endpoints.js","sourceRoot":"","sources":["../../src/hooks/use-get-endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,cAAc,CAAc;QACtD,UAAU,EAAE,uBAAuB;QACnC,OAAO,EAAE,SAAS;KACnB,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,OAAO,SAAS,CAAC,MAAM,CACrB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;YAChB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC/B,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;gBAC3B,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1B,CAAC,CAAC,CAAA;YAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;gBACrC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC/B,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC,EACD,EAAmC,CACpC,CAAA;IACH,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;AACxC,CAAC,CAAA"}

View File

@@ -0,0 +1,5 @@
export declare const useJsonSchemaToJson: (schema: Record<string, any> | undefined) => {
body: string;
setBody: import("react").Dispatch<import("react").SetStateAction<string>>;
};
//# sourceMappingURL=use-json-schema-to-json.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-json-schema-to-json.d.ts","sourceRoot":"","sources":["../../src/hooks/use-json-schema-to-json.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;;;CAU1E,CAAA"}

View File

@@ -0,0 +1,12 @@
import { useEffect, useState } from 'react';
import { convertJsonSchemaToJson } from './utils';
export const useJsonSchemaToJson = (schema) => {
const [body, setBody] = useState('');
useEffect(() => {
if (schema) {
setBody(JSON.stringify(convertJsonSchemaToJson(schema), null, 2));
}
}, [schema]);
return { body, setBody };
};
//# sourceMappingURL=use-json-schema-to-json.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-json-schema-to-json.js","sourceRoot":"","sources":["../../src/hooks/use-json-schema-to-json.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAuC,EAAE,EAAE;IAC7E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAA;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACnE,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AAC1B,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
export declare const usePathParams: (path: string) => string[];
//# sourceMappingURL=use-path-params.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-path-params.d.ts","sourceRoot":"","sources":["../../src/hooks/use-path-params.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,aAGzC,CAAA"}

View File

@@ -0,0 +1,5 @@
export const usePathParams = (path) => {
const pathParams = path.match(/:(\w+)/g);
return pathParams?.map((param) => param.slice(1)) ?? [];
};
//# sourceMappingURL=use-path-params.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-path-params.js","sourceRoot":"","sources":["../../src/hooks/use-path-params.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACxC,OAAO,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AACzD,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
export declare const usePathUrl: (path: string) => string;
//# sourceMappingURL=use-path-url.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-path-url.d.ts","sourceRoot":"","sources":["../../src/hooks/use-path-url.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,WAYtC,CAAA"}

View File

@@ -0,0 +1,15 @@
import { useMemo } from 'react';
import { getPathParamsSelector, getQueryParamsSelector, useEndpointConfiguration, } from './use-endpoint-configuration';
import { useShallow } from 'zustand/react/shallow';
const queryParamsSelector = (state) => Object.values(getQueryParamsSelector(state)).filter((param) => param.active && param.value !== '' && param.name !== '');
export const usePathUrl = (path) => {
const pathParams = useEndpointConfiguration(useShallow(getPathParamsSelector));
const queryParams = useEndpointConfiguration(useShallow(queryParamsSelector));
return useMemo(() => {
const url = path.replace(/:(\w+)/g, (match, p1) => {
return pathParams[p1]?.value || match;
});
return (url + (queryParams.length > 0 ? `?${queryParams.map((param) => `${param.name}=${param.value}`).join('&')}` : ''));
}, [path, pathParams, queryParams]);
};
//# sourceMappingURL=use-path-url.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-path-url.js","sourceRoot":"","sources":["../../src/hooks/use-path-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EAEtB,wBAAwB,GACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,MAAM,mBAAmB,GAAG,CAAC,KAA+B,EAAE,EAAE,CAC9D,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CACjD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE,CACnE,CAAA;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;IACzC,MAAM,UAAU,GAAG,wBAAwB,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAC9E,MAAM,WAAW,GAAG,wBAAwB,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAE7E,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAChD,OAAO,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,KAAK,CAAA;QACvC,CAAC,CAAC,CAAA;QACF,OAAO,CACL,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACjH,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;AACrC,CAAC,CAAA"}

View File

@@ -0,0 +1,8 @@
export declare const useStateStream: (object: Record<string, any> | undefined) => {
data: {};
originalData: any[] | {
[x: string]: any;
};
isStreamed: boolean;
};
//# sourceMappingURL=use-state-stream.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-state-stream.d.ts","sourceRoot":"","sources":["../../src/hooks/use-state-stream.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;;;;;;CAUrE,CAAA"}

View File

@@ -0,0 +1,12 @@
import { useStreamItem } from '@motiadev/stream-client-react';
export const useStateStream = (object) => {
const { __motia, ...rest } = object || {};
const { data } = useStreamItem(__motia);
const originalData = Array.isArray(object) ? object : rest || object;
return {
data: data || originalData,
originalData,
isStreamed: !!__motia,
};
};
//# sourceMappingURL=use-state-stream.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"use-state-stream.js","sourceRoot":"","sources":["../../src/hooks/use-state-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE7D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAuC,EAAE,EAAE;IACxE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IACzC,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAA;IAEpE,OAAO;QACL,IAAI,EAAE,IAAI,IAAI,YAAY;QAC1B,YAAY;QACZ,UAAU,EAAE,CAAC,CAAC,OAAO;KACtB,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
export declare const convertJsonSchemaToJson: (schema?: Record<string, any>) => any;
//# sourceMappingURL=utils.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/hooks/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,GA+BtE,CAAA"}

View File

@@ -0,0 +1,30 @@
export const convertJsonSchemaToJson = (schema) => {
if (!schema)
return {};
if (schema.type === 'object') {
const result = {};
if (schema.properties) {
Object.entries(schema.properties).forEach(([key, value]) => {
result[key] = convertJsonSchemaToJson(value);
});
}
return result;
}
switch (schema.type) {
case 'array':
return [convertJsonSchemaToJson(schema.items)];
case 'string':
return schema.enum?.[0] ?? schema.description ?? 'string';
case 'number':
return schema.description ?? 0;
case 'integer':
return 0;
case 'boolean':
return schema.description ?? false;
case 'null':
return schema.description ?? null;
default:
return undefined;
}
};
//# sourceMappingURL=utils.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/hooks/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAA4B,EAAO,EAAE;IAC3E,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAEtB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAwB,EAAE,CAAA;QAEtC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAgB,EAAE,EAAE;gBACxE,MAAM,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;YAC9C,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,OAAO;YACV,OAAO,CAAC,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAChD,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAA;QAC3D,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,WAAW,IAAI,CAAC,CAAA;QAChC,KAAK,SAAS;YACZ,OAAO,CAAC,CAAA;QACV,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,WAAW,IAAI,KAAK,CAAA;QACpC,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,WAAW,IAAI,IAAI,CAAA;QACnC;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
export { EndpointsPage } from './endpoints-page';
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA"}

View File

@@ -0,0 +1,2 @@
export { EndpointsPage } from './endpoints-page';
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA"}

View File

@@ -0,0 +1,2 @@
export declare const getStatusMessage: (statusCode: number) => string;
//# sourceMappingURL=utils.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/play/reponse-code/utils.ts"],"names":[],"mappings":"AA0EA,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,WAElD,CAAA"}

View File

@@ -0,0 +1,73 @@
const statusMessages = {
// 1xx Informational
100: 'Continue',
101: 'Switching Protocols',
102: 'Processing',
103: 'Early Hints',
// 2xx Success
200: 'OK',
201: 'Created',
202: 'Accepted',
203: 'Non-Authoritative Information',
204: 'No Content',
205: 'Reset Content',
206: 'Partial Content',
207: 'Multi-Status',
208: 'Already Reported',
226: 'IM Used',
// 3xx Redirection
300: 'Multiple Choices',
301: 'Moved Permanently',
302: 'Found',
303: 'See Other',
304: 'Not Modified',
305: 'Use Proxy',
307: 'Temporary Redirect',
308: 'Permanent Redirect',
// 4xx Client Error
400: 'Bad Request',
401: 'Unauthorized',
402: 'Payment Required',
403: 'Forbidden',
404: 'Not Found',
405: 'Method Not Allowed',
406: 'Not Acceptable',
407: 'Proxy Authentication Required',
408: 'Request Timeout',
409: 'Conflict',
410: 'Gone',
411: 'Length Required',
412: 'Precondition Failed',
413: 'Payload Too Large',
414: 'URI Too Long',
415: 'Unsupported Media Type',
416: 'Range Not Satisfiable',
417: 'Expectation Failed',
418: "I'm a teapot",
421: 'Misdirected Request',
422: 'Unprocessable Entity',
423: 'Locked',
424: 'Failed Dependency',
425: 'Too Early',
426: 'Upgrade Required',
428: 'Precondition Required',
429: 'Too Many Requests',
431: 'Request Header Fields Too Large',
451: 'Unavailable For Legal Reasons',
// 5xx Server Error
500: 'Internal Server Error',
501: 'Not Implemented',
502: 'Bad Gateway',
503: 'Service Unavailable',
504: 'Gateway Timeout',
505: 'HTTP Version Not Supported',
506: 'Variant Also Negotiates',
507: 'Insufficient Storage',
508: 'Loop Detected',
510: 'Not Extended',
511: 'Network Authentication Required',
};
export const getStatusMessage = (statusCode) => {
return statusMessages[statusCode] || 'Unknown';
};
//# sourceMappingURL=utils.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/play/reponse-code/utils.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAA2B;IAC7C,oBAAoB;IACpB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,aAAa;IAElB,cAAc;IACd,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,SAAS;IAEd,kBAAkB;IAClB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,oBAAoB;IAEzB,mBAAmB;IACnB,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,gBAAgB;IACrB,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,wBAAwB;IAC7B,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,sBAAsB;IAC3B,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,iCAAiC;IACtC,GAAG,EAAE,+BAA+B;IAEpC,mBAAmB;IACnB,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,4BAA4B;IACjC,GAAG,EAAE,yBAAyB;IAC9B,GAAG,EAAE,sBAAsB;IAC3B,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,iCAAiC;CACvC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAE,EAAE;IACrD,OAAO,cAAc,CAAC,UAAU,CAAC,IAAI,SAAS,CAAA;AAChD,CAAC,CAAA"}

View File

@@ -0,0 +1,7 @@
import { FC } from 'react';
type ResponseCodeProps = {
statusCode: number;
};
export declare const ResponseCode: FC<ResponseCodeProps>;
export {};
//# sourceMappingURL=response-code.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"response-code.d.ts","sourceRoot":"","sources":["../../src/play/response-code.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAG1B,KAAK,iBAAiB,GAAG;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAkB9C,CAAA"}

View File

@@ -0,0 +1,11 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { cn } from '@motiadev/ui';
import { getStatusMessage } from './reponse-code/utils';
export const ResponseCode = ({ statusCode }) => {
const statusMessage = getStatusMessage(statusCode);
const isSuccess = statusCode > 0 && statusCode < 400;
const isWarning = statusCode >= 400 && statusCode < 500;
const isError = statusCode >= 500;
return (_jsxs("div", { className: cn('px-2 py-1 rounded-sm flex items-center gap-1', isWarning && 'dark:bg-[#EAB71F]/20 dark:text-[#EAB71F] bg-[#EAB71F] text-white', isError && 'dark:bg-[#F8367D]/20 dark:text-[#F8367D] bg-[#F8367D] text-white', isSuccess && 'dark:bg-accent-200 dark:text-primary bg-accent text-white'), children: [_jsx("span", { className: "font-bold font-mono", children: statusCode }), " ", statusMessage] }));
};
//# sourceMappingURL=response-code.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"response-code.js","sourceRoot":"","sources":["../../src/play/response-code.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAMvD,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;IACpE,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,GAAG,CAAA;IACpD,MAAM,SAAS,GAAG,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,CAAA;IACvD,MAAM,OAAO,GAAG,UAAU,IAAI,GAAG,CAAA;IAEjC,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,8CAA8C,EAC9C,SAAS,IAAI,kEAAkE,EAC/E,OAAO,IAAI,kEAAkE,EAC7E,SAAS,IAAI,2DAA2D,CACzE,aAED,eAAM,SAAS,EAAC,qBAAqB,YAAE,UAAU,GAAQ,OAAE,aAAa,IACpE,CACP,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,7 @@
import { FC } from 'react';
type SidePanelBodyTabProps = {
schema: Record<string, any> | undefined;
};
export declare const SidePanelBodyTab: FC<SidePanelBodyTabProps>;
export {};
//# sourceMappingURL=side-panel-body-tab.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"side-panel-body-tab.d.ts","sourceRoot":"","sources":["../../src/play/side-panel-body-tab.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAgC,MAAM,OAAO,CAAA;AAMxD,KAAK,qBAAqB,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAA;CACxC,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAiCrD,CAAA"}

View File

@@ -0,0 +1,23 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { CircleX } from 'lucide-react';
import { memo, useCallback, useEffect } from 'react';
import { useShallow } from 'zustand/react/shallow';
import { JsonEditor } from '../components/json-editor';
import { getBodyIsValidSelector, getBodySelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration';
import { convertJsonSchemaToJson } from '../hooks/utils';
export const SidePanelBodyTab = memo(({ schema }) => {
const { setBody, setBodyIsValid } = useEndpointConfiguration();
const bodyIsValid = useEndpointConfiguration(useShallow(getBodyIsValidSelector));
const body = useEndpointConfiguration(getBodySelector);
useEffect(() => {
if (schema) {
setBody(body || JSON.stringify(convertJsonSchemaToJson(schema), null, 2));
setBodyIsValid(true);
}
}, [schema]);
const handleBodyChange = useCallback((value) => {
setBody(value);
}, [setBody, setBodyIsValid]);
return (_jsxs("div", { className: "max-h-full h-full relative", children: [_jsx(JsonEditor, { value: body, schema: schema, onChange: handleBodyChange, onValidate: setBodyIsValid }), !bodyIsValid && (_jsxs("div", { 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", "data-testid": "endpoint-body-tab-invalid", children: [_jsx(CircleX, { className: "w-4 h-4" }), "The body payload is invalid"] }))] }));
});
//# sourceMappingURL=side-panel-body-tab.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"side-panel-body-tab.js","sourceRoot":"","sources":["../../src/play/side-panel-body-tab.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAM,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AACvH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAMxD,MAAM,CAAC,MAAM,gBAAgB,GAA8B,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IAC7E,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,wBAAwB,EAAE,CAAA;IAC9D,MAAM,WAAW,GAAG,wBAAwB,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC,CAAA;IAChF,MAAM,IAAI,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAA;IAEtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YACzE,cAAc,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,KAAa,EAAE,EAAE;QAChB,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC,EACD,CAAC,OAAO,EAAE,cAAc,CAAC,CAC1B,CAAA;IAED,OAAO,CACL,eAAK,SAAS,EAAC,4BAA4B,aACzC,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,GAAI,EAClG,CAAC,WAAW,IAAI,CACf,eACE,SAAS,EAAC,8IAA8I,iBAC5I,2BAA2B,aAEvC,KAAC,OAAO,IAAC,SAAS,EAAC,SAAS,GAAG,mCAE3B,CACP,IACG,CACP,CAAA;AACH,CAAC,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
export declare const SidePanelHeadersTab: () => import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=side-panel-headers-tab.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"side-panel-headers-tab.d.ts","sourceRoot":"","sources":["../../src/play/side-panel-headers-tab.tsx"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,+CA2C/B,CAAA"}

View File

@@ -0,0 +1,26 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { Button } from '@motiadev/ui';
import { Plus } from 'lucide-react';
import { useCallback } from 'react';
import { useShallow } from 'zustand/react/shallow';
import { ConfigurationListItem } from '../components/configuration-list-item';
import { getHeadersSelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration';
export const SidePanelHeadersTab = () => {
const { setHeaders, removeHeaders } = useEndpointConfiguration();
const headers = useEndpointConfiguration(useShallow(getHeadersSelector));
const addHeader = useCallback(() => {
const newHeader = {
name: '',
value: '',
active: true,
};
setHeaders({ ...headers, [new Date().getTime().toString()]: newHeader });
}, [headers, setHeaders]);
const updateHeader = useCallback((key, field, value) => {
if (!key)
return;
setHeaders({ ...headers, [key]: { ...headers[key], [field]: value } });
}, [headers, setHeaders]);
return (_jsxs("div", { className: "h-full max-h-full grid grid-rows-[auto_1fr]", children: [_jsx("div", { className: "grid px-4 border-b h-10 items-center grid-cols-[auto_1fr]", children: _jsxs(Button, { size: "sm", onClick: addHeader, children: [_jsx(Plus, { className: "h-3 w-3" }), "Add"] }) }), _jsxs("div", { className: "p-2", children: [Object.entries(headers).map(([key, header]) => (_jsx(ConfigurationListItem, { value: header, id: key, onUpdate: updateHeader, onRemove: removeHeaders }, key))), Object.entries(headers).length === 0 && (_jsx("div", { className: "grid grid-cols-1 items-center h-full", children: _jsx("div", { className: "text-sm text-muted-foreground text-center", children: "There are no headers in this endpoint" }) }))] })] }));
};
//# sourceMappingURL=side-panel-headers-tab.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"side-panel-headers-tab.js","sourceRoot":"","sources":["../../src/play/side-panel-headers-tab.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AAElG,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,wBAAwB,EAAE,CAAA;IAChE,MAAM,OAAO,GAAG,wBAAwB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAExE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,MAAM,SAAS,GAAG;YAChB,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,IAAI;SACb,CAAA;QACD,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;IAC1E,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;IAEzB,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,GAAW,EAAE,KAAkC,EAAE,KAAuB,EAAE,EAAE;QAC3E,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;IACxE,CAAC,EACD,CAAC,OAAO,EAAE,UAAU,CAAC,CACtB,CAAA;IAED,OAAO,CACL,eAAK,SAAS,EAAC,6CAA6C,aAC1D,cAAK,SAAS,EAAC,2DAA2D,YACxE,MAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,SAAS,aAClC,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,WAErB,GACL,EAEN,eAAK,SAAS,EAAC,KAAK,aACjB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAC9C,KAAC,qBAAqB,IAAW,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,IAA5E,GAAG,CAA6E,CAC7G,CAAC,EAED,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CACvC,cAAK,SAAS,EAAC,sCAAsC,YACnD,cAAK,SAAS,EAAC,2CAA2C,sDAA4C,GAClG,CACP,IACG,IACF,CACP,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,6 @@
type SidePanelParamsTabProps = {
path: string;
};
export declare const SidePanelParamsTab: ({ path }: SidePanelParamsTabProps) => import("react/jsx-runtime").JSX.Element;
export {};
//# sourceMappingURL=side-panel-params-tab.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"side-panel-params-tab.d.ts","sourceRoot":"","sources":["../../src/play/side-panel-params-tab.tsx"],"names":[],"mappings":"AAYA,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,UAAU,uBAAuB,4CAuFnE,CAAA"}

View File

@@ -0,0 +1,39 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { Button } from '@motiadev/ui';
import { Plus } from 'lucide-react';
import { useCallback, useMemo } from 'react';
import { useShallow } from 'zustand/react/shallow';
import { ConfigurationListItem } from '../components/configuration-list-item';
import { EndpointPathPreview } from '../components/endpoint-path-preview';
import { getPathParamsSelector, getQueryParamsSelector, useEndpointConfiguration, } from '../hooks/use-endpoint-configuration';
export const SidePanelParamsTab = ({ path }) => {
const { setQueryParams, removeQueryParams, setPathParams } = useEndpointConfiguration();
const queryParams = useEndpointConfiguration(useShallow(getQueryParamsSelector));
const pathParams = useEndpointConfiguration(useShallow(getPathParamsSelector));
const pathParamsConfig = useMemo(() => {
const params = path.match(/:(\w+)/g);
return (params?.map((param) => {
return { name: param.slice(1), value: pathParams[param.slice(1)]?.value ?? '', active: true };
}) ?? []);
}, [path]);
const addParam = useCallback(() => {
const newParam = {
name: '',
value: '',
active: true,
};
setQueryParams({ ...queryParams, [new Date().getTime().toString()]: newParam });
}, [queryParams, setQueryParams]);
const updateParam = useCallback((key, field, value) => {
if (!key)
return;
setQueryParams({ ...queryParams, [key]: { ...queryParams[key], [field]: value } });
}, [queryParams, setQueryParams]);
const updatePathParam = useCallback((key, field, value) => {
if (!key)
return;
setPathParams({ ...pathParams, [key]: { ...pathParams[key], [field]: value } });
}, [pathParams, setPathParams]);
return (_jsxs("div", { className: "h-full grid grid-rows-[auto_auto_1fr]", children: [_jsx("div", { className: "grid px-4 border-b h-10 items-center grid-cols-[auto_1fr]", children: _jsxs(Button, { size: "sm", onClick: addParam, children: [_jsx(Plus, { className: "h-3 w-3" }), "Add"] }) }), _jsx(EndpointPathPreview, { path: path }), _jsxs("div", { className: "grid grid-rows-[1fr_1fr]", children: [_jsxs("div", { className: "p-2 border-b border-border", children: [_jsx("div", { className: "text-sm font-medium pl-3", children: "Query" }), Object.entries(queryParams).map(([key, param]) => (_jsx(ConfigurationListItem, { value: param, id: key, onUpdate: updateParam, onRemove: removeQueryParams }, key))), Object.entries(queryParams).length === 0 && (_jsx("div", { className: "grid grid-cols-1 items-center h-full", children: _jsx("div", { className: "text-sm text-muted-foreground text-center", children: "There are no query params in this endpoint" }) }))] }), pathParamsConfig.length > 0 && (_jsxs("div", { className: "p-2", children: [_jsx("div", { className: "text-sm font-medium pl-3", children: "Path" }), pathParamsConfig.map((pathName) => (_jsx(ConfigurationListItem, { value: { name: pathName.name, value: pathName.value, active: pathName.active }, id: pathName.name, required: true, onUpdate: updatePathParam }, pathName.name)))] }))] })] }));
};
//# sourceMappingURL=side-panel-params-tab.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"side-panel-params-tab.js","sourceRoot":"","sources":["../../src/play/side-panel-params-tab.tsx"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,2 @@
export declare const SidePanelResponse: import("react").MemoExoticComponent<() => import("react/jsx-runtime").JSX.Element | null>;
//# sourceMappingURL=side-panel-response.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"side-panel-response.d.ts","sourceRoot":"","sources":["../../src/play/side-panel-response.tsx"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,2FA6D5B,CAAA"}

View File

@@ -0,0 +1,21 @@
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
import { Button, Tabs, TabsContent, TabsList, TabsTrigger } from '@motiadev/ui';
import { X } from 'lucide-react';
import { memo, useState } from 'react';
import ReactJson from 'react18-json-view';
import { getResponseSelector, useEndpointConfiguration } from '../hooks/use-endpoint-configuration';
import { useStateStream } from '../hooks/use-state-stream';
import { ResponseCode } from './response-code';
export const SidePanelResponse = memo(() => {
const { setResponse } = useEndpointConfiguration();
const response = useEndpointConfiguration(getResponseSelector);
const { data } = useStateStream(response?.body);
const [activeTab, setActiveTab] = useState('preview');
const onClose = () => setResponse(undefined);
if (!response) {
return null;
}
return (_jsxs(Tabs, { value: activeTab, onValueChange: (value) => setActiveTab(value), className: "border-l border-border", "data-testid": "endpoint-response-container", children: [_jsxs("div", { className: "grid grid-cols-[1fr_auto] items-center h-10 border-b px-5 bg-card", children: [_jsxs(TabsList, { children: [_jsx(TabsTrigger, { value: "preview", className: "cursor-pointer", children: "Preview" }), _jsx(TabsTrigger, { value: "headers", className: "grid grid-cols-[auto_auto] gap-2 items-center cursor-pointer", children: "Headers" })] }), _jsx(Button, { variant: "ghost", size: "icon", onClick: onClose, children: _jsx(X, { className: "h-4 w-4" }) })] }), _jsx("div", { className: "sticky bottom-0 border-b border-border p-3 text-sm flex items-center gap-1 font-medium", children: _jsxs("div", { className: "flex flex-row items-center flex-1 gap-3", children: [_jsx(ResponseCode, { statusCode: response.statusCode }), !!response.executionTime && (_jsxs("div", { className: "text-muted-foreground bg-muted-foreground/10 px-2 py-1 rounded-sm", children: [response.executionTime, "ms"] }))] }) }), _jsx(TabsContent, { value: "preview", children: _jsx(ReactJson, { src: data }) }), _jsx(TabsContent, { value: "headers", children: _jsx("div", { className: "grid grid-cols-[auto_minmax(0,1fr)] gap-4 p-4 overflow-auto auto-rows-max h-full", children: response.headers &&
Object.entries(response.headers).map(([key, value]) => (_jsxs(_Fragment, { children: [_jsx("span", { className: "font-bold text-sm h-8 items-center grid whitespace-nowrap", children: key }), _jsx("span", { className: "text-sm text-muted-foreground h-8 items-center grid whitespace-nowrap", children: value })] }))) }) })] }));
});
//# sourceMappingURL=side-panel-response.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"side-panel-response.js","sourceRoot":"","sources":["../../src/play/side-panel-response.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/E,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,SAAS,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAI9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE;IACzC,MAAM,EAAE,WAAW,EAAE,GAAG,wBAAwB,EAAE,CAAA;IAClD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,mBAAmB,CAAC,CAAA;IAE9D,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC/C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAY,SAAS,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IAE5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,MAAC,IAAI,IACH,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,YAAY,CAAC,KAAkB,CAAC,EAClE,SAAS,EAAC,wBAAwB,iBACtB,6BAA6B,aAEzC,eAAK,SAAS,EAAC,mEAAmE,aAChF,MAAC,QAAQ,eACP,KAAC,WAAW,IAAC,KAAK,EAAC,SAAS,EAAC,SAAS,EAAC,gBAAgB,wBAEzC,EACd,KAAC,WAAW,IAAC,KAAK,EAAC,SAAS,EAAC,SAAS,EAAC,8DAA8D,wBAEvF,IACL,EACX,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAE,OAAO,YAClD,KAAC,CAAC,IAAC,SAAS,EAAC,SAAS,GAAG,GAClB,IACL,EAEN,cAAK,SAAS,EAAC,wFAAwF,YACrG,eAAK,SAAS,EAAC,yCAAyC,aACtD,KAAC,YAAY,IAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,GAAI,EAChD,CAAC,CAAC,QAAQ,CAAC,aAAa,IAAI,CAC3B,eAAK,SAAS,EAAC,mEAAmE,aAC/E,QAAQ,CAAC,aAAa,UACnB,CACP,IACG,GACF,EAEN,KAAC,WAAW,IAAC,KAAK,EAAC,SAAS,YAC1B,KAAC,SAAS,IAAC,GAAG,EAAE,IAAc,GAAI,GACtB,EAEd,KAAC,WAAW,IAAC,KAAK,EAAC,SAAS,YAC1B,cAAK,SAAS,EAAC,kFAAkF,YAC9F,QAAQ,CAAC,OAAO;wBACf,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACrD,8BACE,eAAM,SAAS,EAAC,2DAA2D,YAAE,GAAG,GAAQ,EACxF,eAAM,SAAS,EAAC,uEAAuE,YAAE,KAAK,GAAQ,IACrG,CACJ,CAAC,GACA,GACM,IACT,CACR,CAAA;AACH,CAAC,CAAC,CAAA"}

View File

@@ -0,0 +1,9 @@
import { FC } from 'react';
import { ApiEndpoint } from '../types/endpoint';
type EndpointSidePanelProps = {
endpoint: ApiEndpoint;
onClose: () => void;
};
export declare const SidePanel: FC<EndpointSidePanelProps>;
export {};
//# sourceMappingURL=side-panel.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"side-panel.d.ts","sourceRoot":"","sources":["../../src/play/side-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAkB,MAAM,OAAO,CAAA;AAW1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAO/C,KAAK,sBAAsB,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AAQ5E,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,sBAAsB,CAgF/C,CAAA"}

View File

@@ -0,0 +1,25 @@
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { BackgroundEffect, Badge, Button, cn, Tabs, TabsContent, TabsList, TabsTrigger } from '@motiadev/ui';
import { Book, X } from 'lucide-react';
import { memo, useState } from 'react';
import { useShallow } from 'zustand/react/shallow';
import { EndpointPath } from '../components/endpoint-path';
import { getHeadersSelector, getQueryParamsSelector, getResponseSelector, useEndpointConfiguration, } from '../hooks/use-endpoint-configuration';
import { SpecSidePanel } from '../spec/spec-side-panel';
import { SidePanelBodyTab } from './side-panel-body-tab';
import { SidePanelHeadersTab } from './side-panel-headers-tab';
import { SidePanelParamsTab } from './side-panel-params-tab';
import { SidePanelResponse } from './side-panel-response';
import { TriggerButton } from './trigger-button';
const headersCountSelector = (state) => Object.keys(getHeadersSelector(state)).length;
const hasResponseSelector = (state) => getResponseSelector(state) !== undefined;
const paramsCountSelector = (state) => Object.keys(getQueryParamsSelector(state)).length;
export const SidePanel = memo(({ endpoint, onClose }) => {
const [activeTab, setActiveTab] = useState('body');
const [isSpecOpen, setIsSpecOpen] = useState(false);
const headersCount = useEndpointConfiguration(useShallow(headersCountSelector));
const hasResponse = useEndpointConfiguration(useShallow(hasResponseSelector));
const paramsCount = useEndpointConfiguration(useShallow(paramsCountSelector));
return (_jsxs("div", { className: "isolate grid grid-cols-1 overflow-y-auto min-w-0 grid-rows-[auto_1fr] border-l border-border", "data-testid": "endpoint-details-panel", children: [_jsx(BackgroundEffect, {}), _jsxs("div", { className: "grid grid-cols-[1fr_1fr_auto] items-start gap-4 px-5 py-4 border-b bg-card w-full", children: [_jsxs("div", { className: "grid grid-rows-2 gap-2", children: [_jsx(EndpointPath, { method: endpoint.method, path: endpoint.path }), endpoint.description && _jsx("p", { className: "text-sm text-muted-foreground", children: endpoint.description })] }), _jsx("div", { className: "flex items-end justify-end", children: _jsx(Button, { variant: "icon", size: "icon", onClick: () => setIsSpecOpen(!isSpecOpen), "data-testid": "endpoint-spec-button", children: _jsx(Book, {}) }) }), _jsx(Button, { variant: "icon", size: "icon", onClick: onClose, children: _jsx(X, {}) })] }), _jsxs("div", { className: cn('grid grid-cols-[minmax(350px,1fr)_minmax(auto,1fr)]', !hasResponse && 'grid-cols-1'), children: [_jsxs(Tabs, { value: activeTab, onValueChange: (value) => setActiveTab(value), children: [_jsxs("div", { className: "grid grid-cols-[1fr_auto] items-center h-10 border-b px-5 bg-card", children: [_jsxs(TabsList, { children: [_jsxs(TabsTrigger, { value: "params", className: "grid grid-cols-[auto_auto] gap-2 items-center cursor-pointer", "data-testid": "endpoint-params-tab", children: ["Params", _jsx(Badge, { variant: "outline", className: "h-4 px-1.5 text-xs", children: paramsCount })] }), _jsx(TabsTrigger, { value: "body", className: "cursor-pointer", "data-testid": "endpoint-body-tab", children: "Body" }), _jsxs(TabsTrigger, { value: "headers", className: "grid grid-cols-[auto_auto] gap-2 items-center cursor-pointer", "data-testid": "endpoint-headers-tab", children: ["Headers", _jsx(Badge, { variant: "outline", className: "h-4 px-1.5 text-xs", children: headersCount })] })] }), _jsx(TriggerButton, { method: endpoint.method, path: endpoint.path.toString() })] }), _jsx(TabsContent, { value: "params", children: _jsx(SidePanelParamsTab, { path: endpoint.path }) }), _jsx(TabsContent, { value: "body", children: _jsx(SidePanelBodyTab, { schema: endpoint.bodySchema }) }), _jsx(TabsContent, { value: "headers", children: _jsx(SidePanelHeadersTab, {}) })] }), _jsx(SidePanelResponse, {})] }), isSpecOpen && _jsx(SpecSidePanel, { endpoint: endpoint, onClose: () => setIsSpecOpen(false) })] }));
});
//# sourceMappingURL=side-panel.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"side-panel.js","sourceRoot":"","sources":["../../src/play/side-panel.tsx"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,7 @@
type TriggerButtonProps = {
method: string;
path: string;
};
export declare const TriggerButton: import("react").MemoExoticComponent<({ method, path }: TriggerButtonProps) => import("react/jsx-runtime").JSX.Element>;
export {};
//# sourceMappingURL=trigger-button.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"trigger-button.d.ts","sourceRoot":"","sources":["../../src/play/trigger-button.tsx"],"names":[],"mappings":"AAYA,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,aAAa,yDAA2B,kBAAkB,6CA0CrE,CAAA"}

Some files were not shown because too many files have changed in this diff Show More