diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..4d79604 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,165 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Common Development Commands + +### Backend (.NET) +```bash +# Build entire solution +dotnet build src/Managing.sln + +# Run main API (port 80/443) +dotnet run --project src/Managing.Api/Managing.Api.csproj + +# Run worker API (port 81/444) +dotnet run --project src/Managing.Api.Workers/Managing.Api.Workers.csproj + +# Run tests +dotnet test src/Managing.Application.Tests/ +dotnet test src/Managing.Infrastructure.Tests/ + +# Run specific test +dotnet test --filter "TestMethodName" + +# Database migrations +dotnet ef database update --project src/Managing.Infrastructure.Database/Managing.Infrastructure.Databases.csproj --context ManagingDbContext +dotnet ef migrations add --project src/Managing.Infrastructure.Database/Managing.Infrastructure.Databases.csproj --context ManagingDbContext + +# Regenerate API client (after API changes) +cd src/Managing.Nswag && dotnet build +``` + +### Frontend (React/TypeScript) +```bash +cd src/Managing.WebApp + +# Install dependencies +npm install + +# Development server +npm run dev + +# Build for production +npm run build + +# Linting and type checking +npm run lint +npm run typecheck + +# Tests +npm run test +``` + +### Full Stack Development +```bash +# Quick start with Docker +./scripts/build_and_run.sh + +# Alternative using Aspire +cd src && ./run-aspire.sh +``` + +## Architecture Overview + +### Clean Architecture Pattern +The codebase follows Clean Architecture with clear layer separation: +- **Domain** (`Managing.Domain`): Business entities and core rules +- **Application** (`Managing.Application*`): Use cases, commands, and business orchestration +- **Infrastructure** (`Managing.Infrastructure.*`): External integrations (databases, Web3, messaging) +- **Presentation** (`Managing.Api*`): REST APIs and controllers + +### Service Architecture +Multiple coordinated services handle different concerns: +- **Managing.Api**: Main trading operations, bot management, backtesting +- **Managing.Api.Workers**: Background workers for price data, genetic algorithms, statistics +- **Managing.Web3Proxy**: Node.js service for Web3/GMX blockchain interactions +- **Managing.WebApp**: React frontend with real-time SignalR updates + +### Data Storage Strategy (Polyglot Persistence) +- **PostgreSQL**: Transactional data (users, bots, positions, scenarios, backtests) +- **InfluxDB**: Time-series data (OHLCV candles, agent balances, performance metrics) +- **MongoDB**: Document storage for certain data types + +### Key Domain Concepts +- **Bot**: Abstract base with lifecycle management for trading automation +- **Position**: Trading positions with PnL tracking and trade history +- **Scenario**: Collections of technical indicators defining trading strategies +- **Indicator**: Technical analysis tools (RSI, MACD, EMA, SuperTrend, etc.) +- **MoneyManagement**: Risk parameters (stop loss, take profit, position sizing) +- **Account**: Multi-exchange trading accounts (CEX, GMX V2, Privy wallets) + +## Development Patterns + +### Adding New Features +1. **Domain First**: Create entities in `Managing.Domain` +2. **Application Layer**: Add services/command handlers in `Managing.Application` +3. **Infrastructure**: Implement repositories and external integrations +4. **API Layer**: Add controllers and endpoints +5. **Frontend**: Update React components and API client + +### Bot Development +- Inherit from `Bot` base class in `Managing.Domain/Bots/` +- Implement `SaveBackup()` and `LoadBackup()` for persistence +- Use dependency injection pattern for services +- Follow worker pattern for background execution + +### Adding Technical Indicators +1. Create indicator class implementing `IIndicator` +2. Add to `IndicatorType` enum in `Managing.Common` +3. Register in DI container via `ApiBootstrap` +4. Implement calculation logic in `TradingService` + +### Database Changes +1. Update entities in domain layer +2. Modify `ManagingDbContext` with new DbSets +3. Generate EF Core migration +4. Update repository interfaces and implementations +5. Consider InfluxDB for time-series data + +### Web3 Integration +- GMX V2 interactions go through `Managing.Web3Proxy` Node.js service +- Use `Managing.Infrastructure.Web3` for .NET integration +- Privy handles wallet management and authentication + +## Configuration & Environment + +### Key Configuration Files +- `src/Managing.Api/appsettings.*.json`: Main API configuration +- `src/Managing.Api.Workers/appsettings.*.json`: Worker configuration +- `src/Managing.WebApp/.env`: Frontend environment variables + +### Environment-Specific Deployments +- Development: `appsettings.Development.json` +- Sandbox: `appsettings.Sandbox.json` +- Production: `appsettings.Production.json` +- Docker: `appsettings.Oda-docker.json` + +## Important Development Guidelines + +### Quantitative Finance Principles +- Use `decimal` for all monetary calculations (never `float` or `double`) +- Implement proper audit trails for financial operations +- Validate trading strategies with historical backtesting +- Optimize time-series processing for performance + +### Code Architecture Rules +- Follow Controller → Application → Repository pattern (never inject repositories directly into controllers) +- Use CQRS pattern with command handlers for complex operations +- Implement proper error handling with user-friendly messages +- Maintain separation between domain logic and infrastructure concerns + +### API Development +- Follow RESTful conventions +- Use attribute routing in controllers +- Return appropriate HTTP status codes +- Implement proper validation using Data Annotations + +### Testing Strategy +- Unit tests focus on domain logic and indicators +- Integration tests for external service interactions +- Use data-driven testing with JSON fixtures for backtesting scenarios + +## Real-time Features +- SignalR hubs provide live updates for trading data, bot status, and market information +- Frontend uses reactive patterns with real-time price feeds and position updates \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 70bb0bc..0000000 --- a/package-lock.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "managing-apps", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "genetic-js": "^0.1.14" - } - }, - "node_modules/genetic-js": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/genetic-js/-/genetic-js-0.1.14.tgz", - "integrity": "sha512-HHm21naCEF1EVKTWPFzKX4ENB7Nn/my4kTy2POi4u/2gB0XPUOh8oDlhhESVCZVBge3b7nuLrZNZNAt4ObH19Q==", - "license": "BSD" - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 59feab5..0000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "genetic-js": "^0.1.14" - } -} diff --git a/src/.dockerignore b/src/.dockerignore deleted file mode 100644 index 8b13789..0000000 --- a/src/.dockerignore +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/Managing.Pinky/.env b/src/Managing.Pinky/.env deleted file mode 100644 index 6128ea3..0000000 --- a/src/Managing.Pinky/.env +++ /dev/null @@ -1,7 +0,0 @@ -VITE_API_URL_LOCAL=http://localhost:5000 -VITE_API_URL_SERVER=https://dev-managing-api.apps.managing.live -VITE_WORKER_URL_LOCAL=https://localhost:5002 -VITE_WORKER_URL_SERVER=https://dev-managing-worker.apps.managing.live -ALCHEMY_ID=Bao7OirVe4bmYiDbPh0l8cs5gYb5D4_9 -WALLET_CONNECT_PROJECT_ID=363bf09c10fec2293b21ee199b2ce8d5 -VITE_PRIVY_APP_ID=cm7u09v0u002zrkuf2yjjr58p diff --git a/src/Managing.Pinky/.eslintignore b/src/Managing.Pinky/.eslintignore deleted file mode 100644 index f06235c..0000000 --- a/src/Managing.Pinky/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist diff --git a/src/Managing.Pinky/.eslintrc b/src/Managing.Pinky/.eslintrc deleted file mode 100644 index 2d7c78b..0000000 --- a/src/Managing.Pinky/.eslintrc +++ /dev/null @@ -1,98 +0,0 @@ -{ - "root": true, - "extends": [ - "plugin:@typescript-eslint/recommended", - "plugin:jsx-a11y/recommended" - ], - "parser": "@typescript-eslint/parser", - "plugins": [ - "jsx-a11y", - "import", - "sort-keys-fix", - "react-hooks", - "@typescript-eslint", - "prettier" - ], - "env": { - "browser": true, - "node": true, - "es6": true, - "jest": true - }, - "globals": { - "JSX": "readonly" - }, - "settings": { - "react": { - "version": "detect" - }, - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"] - }, - "import/resolver": { - "node": { - "extensions": [".js", ".jsx", ".ts", ".tsx"] - }, - "typescript": { - "alwaysTryTypes": true, - // always try to resolve types under `@types` directory even it doesn't contain any source code, like `@types/unist` - "project": ["tsconfig.json"] - } - } - }, - "rules": { - "no-alert": "error", - "no-console": "error", - "react-hooks/rules-of-hooks": "error", - "prettier/prettier": [ - "warn", - {}, - { - "properties": { - "usePrettierrc": true - } - } - ], - "import/order": [ - "warn", - { - "groups": [ - "builtin", - "external", - "internal", - "parent", - "sibling", - "index", - "object" - ], - "newlines-between": "always", - "alphabetize": { - "order": "asc", - "caseInsensitive": true - } - } - ], - "import/named": "error", - "import/default": "error", - "import/export": "error", - "import/no-named-as-default": "warn", - "import/no-duplicates": "error", - "sort-keys-fix/sort-keys-fix": "warn", - "@import/no-named-as-default-member": "off", - "@typescript-eslint/consistent-type-imports": "warn", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/no-empty-function": "off" - }, - "overrides": [ - { - "files": ["*.js"], - "rules": { - "@typescript-eslint/explicit-module-boundary-types": ["off"], - "@typescript-eslint/no-var-requires": ["off"] - } - } - ] -} diff --git a/src/Managing.Pinky/.gitattributes b/src/Managing.Pinky/.gitattributes deleted file mode 100644 index 2dd6f4d..0000000 --- a/src/Managing.Pinky/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -.jest/* linguist-vendored -mocks/* linguist-vendored -mockServiceWorker.js linguist-vendored diff --git a/src/Managing.Pinky/.github/workflows/build.yml b/src/Managing.Pinky/.github/workflows/build.yml deleted file mode 100644 index cf9565c..0000000 --- a/src/Managing.Pinky/.github/workflows/build.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Build -on: - push: - branches: - - main - pull_request: - branches: - - main -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2-beta - with: - node-version: '18.1.0' - - run: yarn install - - run: yarn build diff --git a/src/Managing.Pinky/.github/workflows/lint.yml b/src/Managing.Pinky/.github/workflows/lint.yml deleted file mode 100644 index d84f5b7..0000000 --- a/src/Managing.Pinky/.github/workflows/lint.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Lint -on: - push: - branches: - - main - pull_request: - branches: - - main -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2-beta - with: - node-version: '18.1.0' - - run: yarn install - - run: yarn lint diff --git a/src/Managing.Pinky/.github/workflows/test.yml b/src/Managing.Pinky/.github/workflows/test.yml deleted file mode 100644 index c409935..0000000 --- a/src/Managing.Pinky/.github/workflows/test.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Test -on: - push: - branches: - - main - pull_request: - branches: - - main -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2-beta - with: - node-version: '18.1.0' - - run: yarn install - - run: yarn test diff --git a/src/Managing.Pinky/.github/workflows/typecheck.yml b/src/Managing.Pinky/.github/workflows/typecheck.yml deleted file mode 100644 index eeb1640..0000000 --- a/src/Managing.Pinky/.github/workflows/typecheck.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Typecheck -on: - push: - branches: - - main - pull_request: - branches: - - main -jobs: - typecheck: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2-beta - with: - node-version: '18.1.0' - - run: yarn install - - run: yarn typecheck diff --git a/src/Managing.Pinky/.gitignore b/src/Managing.Pinky/.gitignore deleted file mode 100644 index d451ff1..0000000 --- a/src/Managing.Pinky/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -.DS_Store -dist -dist-ssr -*.local diff --git a/src/Managing.Pinky/.prettierignore b/src/Managing.Pinky/.prettierignore deleted file mode 100644 index 4969764..0000000 --- a/src/Managing.Pinky/.prettierignore +++ /dev/null @@ -1,5 +0,0 @@ -.git -node_modules -.eslintignore -.gitignore -LICENSE diff --git a/src/Managing.Pinky/.prettierrc b/src/Managing.Pinky/.prettierrc deleted file mode 100644 index fd496a8..0000000 --- a/src/Managing.Pinky/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "semi": false -} diff --git a/src/Managing.Pinky/Dockerfile b/src/Managing.Pinky/Dockerfile deleted file mode 100644 index 1d1c6bf..0000000 --- a/src/Managing.Pinky/Dockerfile +++ /dev/null @@ -1,42 +0,0 @@ -# Use an official Node.js image as the base -FROM node:18-alpine - -# Set the working directory in the container -WORKDIR /app - -# Set environment variable to skip Chromium download -ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true - -# Install git and Python -RUN apk update && apk add --no-cache git python3 make g++ - -# Create a symlink for python3 as python -RUN ln -sf /usr/bin/python3 /usr/bin/python - -# Copy package.json and package-lock.json to the container -# COPY package*.json ./ -COPY /src/Managing.WebApp/package.json ./ - -# Install dependencies with the --legacy-peer-deps flag to bypass peer dependency conflicts -RUN npm install --legacy-peer-deps -RUN npm install -g tailwindcss postcss autoprefixer @tailwindcss/typography - -# Copy the rest of the app's source code to the container -# COPY . . -COPY src/Managing.WebApp/ /app/ -RUN node --max-old-space-size=8192 ./node_modules/.bin/vite build - -# Build the app -RUN npm run build - -# Use NGINX as the web server -FROM nginx:alpine - -# Copy the built app to the NGINX web server directory -COPY --from=0 /app/build /usr/share/nginx/html - -# Expose port 80 for the NGINX web server -EXPOSE 80 - -# Start the NGINX web server -CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/src/Managing.Pinky/Dockerfile-pinky b/src/Managing.Pinky/Dockerfile-pinky deleted file mode 100644 index e31729a..0000000 --- a/src/Managing.Pinky/Dockerfile-pinky +++ /dev/null @@ -1,44 +0,0 @@ -# Use an official Node.js image as the base -FROM node:18-alpine - -# Set the working directory in the container -WORKDIR /app - -# Set environment variable to skip Chromium download -ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true - -# Install git and Python -RUN apk update && apk add --no-cache git python3 make g++ - -# Create a symlink for python3 as python -RUN ln -sf /usr/bin/python3 /usr/bin/python - -# Copy package.json and package-lock.json to the container -# COPY package*.json ./ -COPY /src/Managing.Pinky/package.json ./ - -# Install dependencies with the --legacy-peer-deps flag to bypass peer dependency conflicts -RUN npm install --legacy-peer-deps -RUN npm install -g tailwindcss postcss autoprefixer @tailwindcss/typography - -# Copy the rest of the app's source code to the container -# COPY . . -RUN ls -la -COPY src/Managing.Pinky/ . -RUN node --max-old-space-size=8192 ./node_modules/.bin/vite build - -# Build the app -RUN npm run build - -# Use NGINX as the web server -FROM nginx:alpine - -# Copy the built app to the NGINX web server directory -# COPY --from=0 /app/build /usr/share/nginx/html -COPY --from=0 /app/dist /usr/share/nginx/html - -# Expose port 80 for the NGINX web server -EXPOSE 80 - -# Start the NGINX web server -CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/src/Managing.Pinky/LICENSE b/src/Managing.Pinky/LICENSE deleted file mode 100644 index b229c5f..0000000 --- a/src/Managing.Pinky/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Managing - -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. diff --git a/src/Managing.Pinky/README.md b/src/Managing.Pinky/README.md deleted file mode 100644 index 5be74be..0000000 --- a/src/Managing.Pinky/README.md +++ /dev/null @@ -1,94 +0,0 @@ -# vite-react-ts-extended [![Typecheck](https://github.com/laststance/vite-react-ts-extended/actions/workflows/typecheck.yml/badge.svg)](https://github.com/laststance/vite-react-ts-extended/actions/workflows/typecheck.yml) [![Test](https://github.com/laststance/vite-react-ts-extended/actions/workflows/test.yml/badge.svg)](https://github.com/laststance/vite-react-ts-extended/actions/workflows/test.yml) [![Build](https://github.com/laststance/vite-react-ts-extended/actions/workflows/build.yml/badge.svg)](https://github.com/laststance/vite-react-ts-extended/actions/workflows/build.yml) [![Lint](https://github.com/laststance/vite-react-ts-extended/actions/workflows/lint.yml/badge.svg)](https://github.com/laststance/vite-react-ts-extended/actions/workflows/lint.yml) [![Depfu](https://badges.depfu.com/badges/6c7775918ccc8647160750e168617a65/overview.svg)](https://depfu.com/github/laststance/vite-react-ts-extended?project_id=32682) - -> My CRA alternative. -> Create plain and lightweight React+TS programming environment with familiar pre-setup tooling -> eslint/prettier, jest/TS/react-testing-library/msw, tailwindcss, CI. - -## [Trying this Online!](https://codesandbox.io/s/vite-react-ts-extended-cbgyfz?file=/src/App.tsx) - - - -This is the official [Vite](https://vitejs.dev/) template(`npm init vite@latest myapp -- --template react-ts`) and some extended setup. - -- [eslint-typescript](https://github.com/typescript-eslint/typescript-eslint) and [Prettier](https://prettier.io/) integration. Rules are 100% my personal setup 💅 -- [jest](https://jestjs.io/), [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/), [react-hooks-testing-library](https://github.com/testing-library/react-hooks-testing-library), [MSW](https://mswjs.io/) -- [tailwindcss](https://tailwindcss.com/) -- [Github Actions](https://github.com/features/actions) - -All npm package are keeping least release version powered by [Depfu](https://depfu.com/). - -# Installation - -``` -npx degit laststance/vite-react-ts-extended myapp -``` - -### yarn - -```sh -cd myapp -yarn install -yarn validate # The installation was successful if no error occurs after running 'validate'. -yarn dev -``` - -### npm - -```sh -cd myapp -npm install -npm run validate # The installation was successful if no error occurs after running 'validate'. -npm run dev -``` - -### Commands - -```sh -yarn dev # start development server -yarn validate # run test,lint,build,typecheck concurrently -yarn test # run jest -yarn lint # run eslint -yarn lint:fix # run eslint with --fix option -yarn typecheck # run TypeScript compiler check -yarn build # build production bundle to 'dist' directly -yarn prettier # run prettier for json|yml|css|md|mdx files -yarn clean # remove 'node_modules' 'yarn.lock' 'dist' completely -yarn serve # launch server for production bundle in local -``` - -# Background - -The evolution of the React framework is accelerating more than ever before. -[Next.js](https://nextjs.org/), [Remix](https://remix.run/), [RedwoodJS](https://redwoodjs.com/), [Gatsby](https://www.gatsbyjs.com/), [Blitz](https://blitzjs.com/) etc... - -Ahthough I still need plain React programming starter some reason. (.e.g Demo, Experiment like Deep Dive React Core.) -So far, [create-react-app](https://github.com/facebook/create-react-app) **was** it. -In short, [create-react-app](https://github.com/facebook/create-react-app) development couldn't say active. Please read the [Issue](https://github.com/facebook/create-react-app/issues/11180) in details. - -So I created an alternative to [create-react-app](https://github.com/facebook/create-react-app) for myself, based on [Vite](https://github.com/facebook/create-react-app). -This project contains my very opinionted setup, -but I hope it will be a useful tool for people who have similar needs to mine! 😀 - -# License - -MIT - -## Contributors ✨ - -Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): - - - - - - - - -

ryota-murakami

💻 📖 ⚠️
- - - - - - -This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! diff --git a/src/Managing.Pinky/index.html b/src/Managing.Pinky/index.html deleted file mode 100644 index 9177d83..0000000 --- a/src/Managing.Pinky/index.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - Happy Birthday My Love - - - - - - - - -
- - - - - - - -
- - - - - - - - - -
- - -
-
-
- Rooftop pixel art -
-

Happy Birthday My Love!

-

Our journey together began on a rooftop...

-

Where we first met under the stars ✨

-
- Pixel heart -
-
-
- -
-
-
- Park pixel art -
-

Our First Date

-

Walking in the park together

-

I knew then you were special 💕

-
- You - Her -
-
-
- -
-
-
- Kitchen pixel art -
-

Our First Cooking Night

-

Making dinner together in your kitchen

-

Simple moments that mean everything 🍳

-
- Pixel heart -
-
-
- -
-
-
- Chinese restaurant pixel art -
-

Chinese Restaurant

-

"I like to try things"

-

And trying life with you has been the best adventure 🥢

-
- Pixel heart -
-
-
- -
-
-
- Kao Sok pixel art -
-

Kao Sok Adventure

-

Our trip to Kao Sok with my best friend

-

Sharing my world with you 🌿

-
- Pixel jungle -
-
-
- -
-
-
- Kuala Lumpur pixel art -
-

Kuala Lumpur

-

Joining you during your work trip

-

Because every moment with you is precious 🌆

-
- Pixel heart -
-
-
- -
-
-
- France pixel art -
-

Time Apart

-

Me leaving for France

-

You facing work difficulties

-

Remember to take time for yourself

-

Your health and happiness matter most 💖

-
-
- -
-
-
- Birthday kiss pixel art -
-

Happy Birthday!

-

Back together in Bangkok

-

Celebrating you on your special day 🎂

-
- Pixel heart -
-

I love you more than words can say

-

(Tap the heart below)

-
- -
- -
-
-
- - - - \ No newline at end of file diff --git a/src/Managing.Pinky/install_problematic_packages.sh b/src/Managing.Pinky/install_problematic_packages.sh deleted file mode 100644 index 62a600e..0000000 --- a/src/Managing.Pinky/install_problematic_packages.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash - -# Array of known potentially hanging packages -hanging_packages=("xmlhttprequest-ssl@latest" "engine.io-parser@latest") - -# Timeout in seconds for each package installation attempt - - -install_with_timeout() { - package=$1 - echo "Attempting to install $package with a timeout of $timeout_duration seconds." - # Start npm install in the background - npm install $package --verbose &> $package.log & - - # Get PID of the npm process - pid=$! - - # Wait for the npm process to finish or timeout - (sleep $timeout_duration && kill -0 $pid 2>/dev/null && kill -9 $pid && echo "Timeout reached for $package, process killed." && echo $package >> exclude.log) & - waiter_pid=$! - - # Wait for the npm process to complete - wait $pid - - # Kill the waiter process in case npm finished before the timeout - kill -0 $waiter_pid 2>/dev/null && kill -9 $waiter_pid -} - -# Install potentially hanging packages first with a timeout -for package in "${hanging_packages[@]}"; do - install_with_timeout $package -done diff --git a/src/Managing.Pinky/jest.config.js b/src/Managing.Pinky/jest.config.js deleted file mode 100644 index dd7f4d9..0000000 --- a/src/Managing.Pinky/jest.config.js +++ /dev/null @@ -1,35 +0,0 @@ -const config = { - collectCoverageFrom: ['/src/**/*.{js,jsx,ts,tsx}', '!src/**/*.d.ts'], - moduleDirectories: ['node_modules'], - moduleFileExtensions: ['js', 'mjs', 'jsx', 'ts', 'tsx', 'json'], - moduleNameMapper: { - '^.+\\.module\\.(css|sass|scss)$': 'identity-obj-proxy', - }, - notify: true, - notifyMode: 'success-change', - resetMocks: true, - roots: [''], - setupFilesAfterEnv: ['/jest/setupTests.ts'], - testEnvironment: 'jsdom', - testMatch: [ - '/src/**/*.{spec,test}.{js,jsx,ts,tsx}', - '/src/**/__tests__/**/*.{js,jsx,ts,tsx}', - ], - transform: { - '^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)': - '/jest/fileTransform.js', - '^.+\\.[jt]sx?$': 'esbuild-jest', - '^.+\\.css$': '/jest/cssTransform.js', - }, - transformIgnorePatterns: [ - '[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$', - '^.+\\.module\\.(css|sass|scss)$', - ], - verbose: true, - watchPlugins: [ - 'jest-watch-typeahead/filename', - 'jest-watch-typeahead/testname', - ], -} - -module.exports = config diff --git a/src/Managing.Pinky/package-lock.json b/src/Managing.Pinky/package-lock.json deleted file mode 100644 index ee30f02..0000000 --- a/src/Managing.Pinky/package-lock.json +++ /dev/null @@ -1,3400 +0,0 @@ -{ - "name": "managing", - "version": "2.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "managing", - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "@heroicons/react": "^1.0.6", - "@tailwindcss/typography": "^0.5.0", - "@tanstack/react-query": "^5.67.1", - "autoprefixer": "^10.4.7", - "classnames": "^2.3.1", - "jotai": "^1.6.7", - "latest-version": "^9.0.0" - }, - "devDependencies": { - "@types/elliptic": "^6.4.18", - "@types/react": "^18.0.9", - "@types/react-dom": "^18.0.4", - "@types/react-grid-layout": "^1.3.2", - "@types/react-plotly.js": "^2.6.0", - "@types/react-slider": "^1.3.1", - "@types/react-table": "^7.7.12", - "@vitejs/plugin-react": "^1.3.2", - "autoprefixer": "^10.4.7", - "daisyui": "^3.5.1", - "postcss": "^8.4.13", - "prettier": "^2.6.1", - "prettier-plugin-tailwind-css": "^1.5.0", - "tailwindcss": "^3.0.23", - "typescript": "^5.7.3", - "vite": "^6.0.11" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", - "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", - "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", - "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", - "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", - "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@heroicons/react": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-1.0.6.tgz", - "integrity": "sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ==", - "peerDependencies": { - "react": ">= 16" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.0.tgz", - "integrity": "sha512-Eeao7ewDq79jVEsrtWIj5RNqB8p2knlm9fhR6uJ2gqP7UfbLrTrxevudVrEPDM7Wkpn/HpRC2QfazH7MXLz3vQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.0.tgz", - "integrity": "sha512-yVh0Kf1f0Fq4tWNf6mWcbQBCLDpDrDEl88lzPgKhrgTcDrTtlmun92ywEF9dCjmYO3EFiSuJeeo9cYRxl2FswA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.0.tgz", - "integrity": "sha512-gCs0ErAZ9s0Osejpc3qahTsqIPUDjSKIyxK/0BGKvL+Tn0n3Kwvj8BrCv7Y5sR1Ypz1K2qz9Ny0VvkVyoXBVUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.0.tgz", - "integrity": "sha512-aIB5Anc8hngk15t3GUkiO4pv42ykXHfmpXGS+CzM9CTyiWyT8HIS5ygRAy7KcFb/wiw4Br+vh1byqcHRTfq2tQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.0.tgz", - "integrity": "sha512-kpdsUdMlVJMRMaOf/tIvxk8TQdzHhY47imwmASOuMajg/GXpw8GKNd8LNwIHE5Yd1onehNpcUB9jHY6wgw9nHQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.0.tgz", - "integrity": "sha512-D0RDyHygOBCQiqookcPevrvgEarN0CttBecG4chOeIYCNtlKHmf5oi5kAVpXV7qs0Xh/WO2RnxeicZPtT50V0g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.0.tgz", - "integrity": "sha512-mCIw8j5LPDXmCOW8mfMZwT6F/Kza03EnSr4wGYEswrEfjTfVsFOxvgYfuRMxTuUF/XmRb9WSMD5GhCWDe2iNrg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.0.tgz", - "integrity": "sha512-AwwldAu4aCJPob7zmjuDUMvvuatgs8B/QiVB0KwkUarAcPB3W+ToOT+18TQwY4z09Al7G0BvCcmLRop5zBLTag==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.0.tgz", - "integrity": "sha512-e7kDUGVP+xw05pV65ZKb0zulRploU3gTu6qH1qL58PrULDGxULIS0OSDQJLH7WiFnpd3ZKUU4VM3u/Z7Zw+e7Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.0.tgz", - "integrity": "sha512-SXYJw3zpwHgaBqTXeAZ31qfW/v50wq4HhNVvKFhRr5MnptRX2Af4KebLWR1wpxGJtLgfS2hEPuALRIY3LPAAcA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.0.tgz", - "integrity": "sha512-e5XiCinINCI4RdyU3sFyBH4zzz7LiQRvHqDtRe9Dt8o/8hTBaYpdPimayF00eY2qy5j4PaaWK0azRgUench6WQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.0.tgz", - "integrity": "sha512-3SWN3e0bAsm9ToprLFBSro8nJe6YN+5xmB11N4FfNf92wvLye/+Rh5JGQtKOpwLKt6e61R1RBc9g+luLJsc23A==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.0.tgz", - "integrity": "sha512-B1Oqt3GLh7qmhvfnc2WQla4NuHlcxAD5LyueUi5WtMc76ZWY+6qDtQYqnxARx9r+7mDGfamD+8kTJO0pKUJeJA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.0.tgz", - "integrity": "sha512-UfUCo0h/uj48Jq2lnhX0AOhZPSTAq3Eostas+XZ+GGk22pI+Op1Y6cxQ1JkUuKYu2iU+mXj1QjPrZm9nNWV9rg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.0.tgz", - "integrity": "sha512-chZLTUIPbgcpm+Z7ALmomXW8Zh+wE2icrG+K6nt/HenPLmtwCajhQC5flNSk1Xy5EDMt/QAOz2MhzfOfJOLSiA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.0.tgz", - "integrity": "sha512-jo0UolK70O28BifvEsFD/8r25shFezl0aUk2t0VJzREWHkq19e+pcLu4kX5HiVXNz5qqkD+aAq04Ct8rkxgbyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.0.tgz", - "integrity": "sha512-Vmg0NhAap2S54JojJchiu5An54qa6t/oKT7LmDaWggpIcaiL8WcWHEN6OQrfTdL6mQ2GFyH7j2T5/3YPEDOOGA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.0.tgz", - "integrity": "sha512-CV2aqhDDOsABKHKhNcs1SZFryffQf8vK2XrxP6lxC99ELZAdvsDgPklIBfd65R8R+qvOm1SmLaZ/Fdq961+m7A==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.0.tgz", - "integrity": "sha512-g2ASy1QwHP88y5KWvblUolJz9rN+i4ZOsYzkEwcNfaNooxNUXG+ON6F5xFo0NIItpHqxcdAyls05VXpBnludGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@tailwindcss/typography": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", - "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", - "license": "MIT", - "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" - } - }, - "node_modules/@tanstack/query-core": { - "version": "5.72.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.72.0.tgz", - "integrity": "sha512-aa3p6Mou++JLLxxxVX9AB9uGeRIGc0JWkw96GASXuMG8K3D+JpYbSFcqXbkGFJ1eX2jKHPurmCBoO43RjjXJCA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@tanstack/react-query": { - "version": "5.72.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.72.0.tgz", - "integrity": "sha512-4Dejq/IiXrPlr/0xxj4H2GbC6KckwfTCoHWbd02+UoIV0laC9yke0d0KegmFdXJA712I6UCuy8WpPM76uuPJ+w==", - "license": "MIT", - "dependencies": { - "@tanstack/query-core": "5.72.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^18 || ^19" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", - "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/elliptic": { - "version": "6.4.18", - "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.18.tgz", - "integrity": "sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/bn.js": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "22.13.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.0.tgz", - "integrity": "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==", - "dev": true, - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/plotly.js": { - "version": "2.35.4", - "resolved": "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-2.35.4.tgz", - "integrity": "sha512-A8d3r8I2vIsaMRJ+0ZLvzW98l4vDu5AuLAWwtWSF61ekqUj3q6Hu0w6RQk+S1fumu7A3Fji+aodta4F9+8BMuA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", - "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.6.tgz", - "integrity": "sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^18.0.0" - } - }, - "node_modules/@types/react-grid-layout": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/react-grid-layout/-/react-grid-layout-1.3.5.tgz", - "integrity": "sha512-WH/po1gcEcoR6y857yAnPGug+ZhkF4PaTUxgAbwfeSH/QOgVSakKHBXoPGad/sEznmkiaK3pqHk+etdWisoeBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-plotly.js": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/react-plotly.js/-/react-plotly.js-2.6.3.tgz", - "integrity": "sha512-HBQwyGuu/dGXDsWhnQrhH+xcJSsHvjkwfSRjP+YpOsCCWryIuXF78ZCBjpfgO3sCc0Jo8sYp4NOGtqT7Cn3epQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/plotly.js": "*", - "@types/react": "*" - } - }, - "node_modules/@types/react-slider": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.6.tgz", - "integrity": "sha512-RS8XN5O159YQ6tu3tGZIQz1/9StMLTg/FCIPxwqh2gwVixJnlfIodtVx+fpXVMZHe7A58lAX1Q4XTgAGOQaCQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-table": { - "version": "7.7.20", - "resolved": "https://registry.npmjs.org/@types/react-table/-/react-table-7.7.20.tgz", - "integrity": "sha512-ahMp4pmjVlnExxNwxyaDrFgmKxSbPwU23sGQw2gJK4EhCvnvmib2s/O/+y1dfV57dXOwpr2plfyBol+vEHbi2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@vitejs/plugin-react": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.3.2.tgz", - "integrity": "sha512-aurBNmMo0kz1O4qRoY+FM4epSA39y3ShWGuqfLRA/3z0oEJAdtoSfgA3aO98/PCCHAqMaduLxIxErWrVKIFzXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.17.10", - "@babel/plugin-transform-react-jsx": "^7.17.3", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-jsx-self": "^7.16.7", - "@babel/plugin-transform-react-jsx-source": "^7.16.7", - "@rollup/pluginutils": "^4.2.1", - "react-refresh": "^0.13.0", - "resolve": "^1.22.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "devOptional": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001696", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", - "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", - "devOptional": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-selector-tokenizer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", - "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/daisyui": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.9.4.tgz", - "integrity": "sha512-fvi2RGH4YV617/6DntOVGcOugOPym9jTGWW2XySb5ZpvdWO4L7bEG77VHirrnbRUEWvIEVXkBpxUz2KFj0rVnA==", - "dev": true, - "dependencies": { - "colord": "^2.9", - "css-selector-tokenizer": "^0.8", - "postcss": "^8", - "postcss-js": "^4", - "tailwindcss": "^3.1" - }, - "engines": { - "node": ">=16.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/daisyui" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.90", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz", - "integrity": "sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==", - "devOptional": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/esbuild": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", - "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.2", - "@esbuild/android-arm": "0.24.2", - "@esbuild/android-arm64": "0.24.2", - "@esbuild/android-x64": "0.24.2", - "@esbuild/darwin-arm64": "0.24.2", - "@esbuild/darwin-x64": "0.24.2", - "@esbuild/freebsd-arm64": "0.24.2", - "@esbuild/freebsd-x64": "0.24.2", - "@esbuild/linux-arm": "0.24.2", - "@esbuild/linux-arm64": "0.24.2", - "@esbuild/linux-ia32": "0.24.2", - "@esbuild/linux-loong64": "0.24.2", - "@esbuild/linux-mips64el": "0.24.2", - "@esbuild/linux-ppc64": "0.24.2", - "@esbuild/linux-riscv64": "0.24.2", - "@esbuild/linux-s390x": "0.24.2", - "@esbuild/linux-x64": "0.24.2", - "@esbuild/netbsd-arm64": "0.24.2", - "@esbuild/netbsd-x64": "0.24.2", - "@esbuild/openbsd-arm64": "0.24.2", - "@esbuild/openbsd-x64": "0.24.2", - "@esbuild/sunos-x64": "0.24.2", - "@esbuild/win32-arm64": "0.24.2", - "@esbuild/win32-ia32": "0.24.2", - "@esbuild/win32-x64": "0.24.2" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "devOptional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", - "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/jotai": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/jotai/-/jotai-1.13.1.tgz", - "integrity": "sha512-RUmH1S4vLsG3V6fbGlKzGJnLrDcC/HNb5gH2AeA9DzuJknoVxSGvvg8OBB7lke+gDc4oXmdVsaKn/xDUhWZ0vw==", - "license": "MIT", - "engines": { - "node": ">=12.20.0" - }, - "peerDependencies": { - "@babel/core": "*", - "@babel/template": "*", - "jotai-devtools": "*", - "jotai-immer": "*", - "jotai-optics": "*", - "jotai-redux": "*", - "jotai-tanstack-query": "*", - "jotai-urql": "*", - "jotai-valtio": "*", - "jotai-xstate": "*", - "jotai-zustand": "*", - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@babel/template": { - "optional": true - }, - "jotai-devtools": { - "optional": true - }, - "jotai-immer": { - "optional": true - }, - "jotai-optics": { - "optional": true - }, - "jotai-redux": { - "optional": true - }, - "jotai-tanstack-query": { - "optional": true - }, - "jotai-urql": { - "optional": true - }, - "jotai-valtio": { - "optional": true - }, - "jotai-xstate": { - "optional": true - }, - "jotai-zustand": { - "optional": true - } - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "devOptional": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "devOptional": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ky": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.8.0.tgz", - "integrity": "sha512-DoKGmG27nT8t/1F9gV8vNzggJ3mLAyD49J8tTMWHeZvS8qLc7GlyTieicYtFzvDznMe/q2u38peOjkWc5/pjvw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, - "node_modules/latest-version": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", - "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", - "license": "MIT", - "dependencies": { - "package-json": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "devOptional": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/package-json": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", - "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", - "license": "MIT", - "dependencies": { - "ky": "^1.2.0", - "registry-auth-token": "^5.0.2", - "registry-url": "^6.0.1", - "semver": "^7.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nested/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-tailwind-css": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwind-css/-/prettier-plugin-tailwind-css-1.5.0.tgz", - "integrity": "sha512-LUbINk8O0l+r7iPO6fUOQtoZdF7lQ0SGZTrlAl6IjW8zc5URMGqdW2QVoIK2de2HQeKvb9X2xv8aUzf+v2UVYw==", - "dev": true, - "dependencies": { - "prettier": "^2.0.5" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-refresh": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.13.0.tgz", - "integrity": "sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-cache/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.0.tgz", - "integrity": "sha512-+4C/cgJ9w6sudisA0nZz0+O7lTP9a3CzNLsoDwaRumM8QHwghUsu6tqHXiTmNUp/rqNiM14++7dkzHDyCRs0Jg==", - "dev": true, - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.0", - "@rollup/rollup-android-arm64": "4.34.0", - "@rollup/rollup-darwin-arm64": "4.34.0", - "@rollup/rollup-darwin-x64": "4.34.0", - "@rollup/rollup-freebsd-arm64": "4.34.0", - "@rollup/rollup-freebsd-x64": "4.34.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.0", - "@rollup/rollup-linux-arm-musleabihf": "4.34.0", - "@rollup/rollup-linux-arm64-gnu": "4.34.0", - "@rollup/rollup-linux-arm64-musl": "4.34.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.0", - "@rollup/rollup-linux-riscv64-gnu": "4.34.0", - "@rollup/rollup-linux-s390x-gnu": "4.34.0", - "@rollup/rollup-linux-x64-gnu": "4.34.0", - "@rollup/rollup-linux-x64-musl": "4.34.0", - "@rollup/rollup-win32-arm64-msvc": "4.34.0", - "@rollup/rollup-win32-ia32-msvc": "4.34.0", - "@rollup/rollup-win32-x64-msvc": "4.34.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwindcss": { - "version": "3.4.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", - "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.6.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.6", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/terser": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", - "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" - }, - "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", - "devOptional": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/vite": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz", - "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", - "dev": true, - "dependencies": { - "esbuild": "^0.24.2", - "postcss": "^8.4.49", - "rollup": "^4.23.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - } - } -} diff --git a/src/Managing.Pinky/package.json b/src/Managing.Pinky/package.json deleted file mode 100644 index b2a3d22..0000000 --- a/src/Managing.Pinky/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "managing", - "version": "2.0.0", - "license": "MIT", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview", - "serve": "serve -s dist -p 3000", - "test": "jest", - "lint": "eslint . --ext .ts,.tsx,.js,jsx", - "lint:fix": "eslint . --ext .ts,.tsx,.js,jsx --fix", - "typecheck": "tsc --noEmit", - "prettier": "prettier --write \"**/*.+(json|yml|css|md|mdx)\"", - "clean": "rimraf node_modules yarn.lock dist", - "validate": "./scripts/validate" - }, - "dependencies": { - "@heroicons/react": "^1.0.6", - "@tailwindcss/typography": "^0.5.0", - "@tanstack/react-query": "^5.67.1", - "autoprefixer": "^10.4.7", - "classnames": "^2.3.1", - "jotai": "^1.6.7", - "latest-version": "^9.0.0" - }, - "devDependencies": { - "@types/elliptic": "^6.4.18", - "@types/react": "^18.0.9", - "@types/react-dom": "^18.0.4", - "@types/react-grid-layout": "^1.3.2", - "@types/react-plotly.js": "^2.6.0", - "@types/react-slider": "^1.3.1", - "@types/react-table": "^7.7.12", - "@vitejs/plugin-react": "^1.3.2", - "autoprefixer": "^10.4.7", - "daisyui": "^3.5.1", - "postcss": "^8.4.13", - "prettier": "^2.6.1", - "prettier-plugin-tailwind-css": "^1.5.0", - "tailwindcss": "^3.0.23", - "typescript": "^5.7.3", - "vite": "^6.0.11" - }, - "msw": { - "workerDirectory": "" - } -} diff --git a/src/Managing.Pinky/pics/boat.jpg b/src/Managing.Pinky/pics/boat.jpg deleted file mode 100644 index 731bd04..0000000 Binary files a/src/Managing.Pinky/pics/boat.jpg and /dev/null differ diff --git a/src/Managing.Pinky/pics/cook.jpg b/src/Managing.Pinky/pics/cook.jpg deleted file mode 100644 index 3d4621a..0000000 Binary files a/src/Managing.Pinky/pics/cook.jpg and /dev/null differ diff --git a/src/Managing.Pinky/pics/khaosok.JPG b/src/Managing.Pinky/pics/khaosok.JPG deleted file mode 100644 index 22098f8..0000000 Binary files a/src/Managing.Pinky/pics/khaosok.JPG and /dev/null differ diff --git a/src/Managing.Pinky/pics/temple.jpg b/src/Managing.Pinky/pics/temple.jpg deleted file mode 100644 index fa2c69e..0000000 Binary files a/src/Managing.Pinky/pics/temple.jpg and /dev/null differ diff --git a/src/Managing.Pinky/postcss.config.js b/src/Managing.Pinky/postcss.config.js deleted file mode 100644 index 6e41d95..0000000 --- a/src/Managing.Pinky/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - autoprefixer: {}, - tailwindcss: {}, - }, -} diff --git a/src/Managing.Pinky/prettier.config.js b/src/Managing.Pinky/prettier.config.js deleted file mode 100644 index 9280030..0000000 --- a/src/Managing.Pinky/prettier.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - plugins: [require('prettier-plugin-tailwindcss')], - tailwindConfig: './tailwind.config.js', -} diff --git a/src/Managing.Pinky/sound.mp3 b/src/Managing.Pinky/sound.mp3 deleted file mode 100644 index 1a6709c..0000000 Binary files a/src/Managing.Pinky/sound.mp3 and /dev/null differ diff --git a/src/Managing.Pinky/tailwind.config.js b/src/Managing.Pinky/tailwind.config.js deleted file mode 100644 index ad929d2..0000000 --- a/src/Managing.Pinky/tailwind.config.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], - daisyui: { - themes: ['black', 'coffee', 'cyberpunk', 'lofi', 'retro', 'kaigen'], - }, - plugins: [require('@tailwindcss/typography'), require('daisyui')], - theme: { - container: { - center: true, - }, - }, -} diff --git a/src/Managing.Pinky/tsconfig.json b/src/Managing.Pinky/tsconfig.json deleted file mode 100644 index 9f749f4..0000000 --- a/src/Managing.Pinky/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "Node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx" - }, - "include": ["./src", "hardhat.config.js"], - "exclude": ["node_modules"] -} diff --git a/src/Managing.Pinky/vite.config.ts b/src/Managing.Pinky/vite.config.ts deleted file mode 100644 index 9edde64..0000000 --- a/src/Managing.Pinky/vite.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -import react from '@vitejs/plugin-react' -import { defineConfig } from 'vite' - -export default defineConfig({ - build: { - minify: false, - sourcemap: false, - target: 'es2022', - }, - optimizeDeps: { - esbuildOptions: { - target: 'es2022', - }, - }, - plugins: [react()], - publicDir: 'assets', - server: { - host: true, - open: true, - }, -}) diff --git a/src/appsettings.Oda-Sandbox.json b/src/appsettings.Oda-Sandbox.json deleted file mode 100644 index c8c284b..0000000 --- a/src/appsettings.Oda-Sandbox.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "ManagingDatabase": { - "ConnectionString": "mongodb://managingdb:27017", - "DatabaseName": "ManagingDb" - }, - "InfluxDb": { - "Url": "http://influxdb:8086/", - "Organization": "", - "Token": "" - }, - "Serilog": { - "MinimumLevel": { - "Default": "Information", - "Override": { - "Microsoft": "Information", - "System": "Warning" - } - } - }, - "ElasticConfiguration": { - "Uri": "http://elasticsearch:9200" - }, - "Discord": { - "BotActivity": "trading strategies", - "HandleUserAction": true, - "ApplicationId": "", - "PublicKey": "", - "TokenId": "", - "SignalChannelId": 966080506473099314, - "TradesChannelId": 998374177763491851, - "TroublesChannelId": 1015761955321040917, - "CopyTradingChannelId": 1132022887012909126, - "RequestsChannelId": 1018589494968078356, - "ButtonExpirationMinutes": 10 - }, - "AllowedHosts": "*" -} \ No newline at end of file diff --git a/src/appsettings.dev.vm.json b/src/appsettings.dev.vm.json deleted file mode 100644 index 4c6f98e..0000000 --- a/src/appsettings.dev.vm.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "ManagingDatabase": { - "ConnectionString": "srv-captain--mongo-db", - "DatabaseName": "ManagingDb" - }, - "InfluxDb": { - "Url": "https://influx-db.apps.managing.live", - "Token": "gzE8KEmIfBaZYkcEMwaZyY7byO3rVwVsIeAd3UPrmi1xTajQoGWktFQjoQ3Y8D6hCbdIK7l5zVqNYox3wGilrA==", - "Organization": "managing-org" - }, - "Serilog": { - "MinimumLevel": { - "Default": "Information", - "Override": { - "Microsoft": "Information", - "System": "Warning" - } - } - }, - "ElasticConfiguration": { - "Uri": "https://elastic-search.apps.managing.live" - }, - "Discord": { - "ApplicationId": "1134966063075971144", - "PublicKey": "55bc79e483ffa203a1da1e49588c86cf1345dd66d676ab52c73dbf09cc1b4800", - "TokenId": "MTEzNDk2NjA2MzA3NTk3MTE0NA.GWHiDf.2s2qq3XCI2bftfnqm_0ndcou5LQwZPdsCZ9nQc", - "SignalChannelId": 1134858150667898910, - "TradesChannelId": 1134858092530634864, - "TroublesChannelId": 1134858233031446671, - "CopyTradingChannelId": 1134857874896588881, - "RequestsChannelId": 1018589494968078356, - "LeaderboardChannelId": 1133169725237633095, - "NoobiesboardChannelId": 1133504653485690940, - "ButtonExpirationMinutes": 10 - - }, - "AllowedHosts": "*" -} \ No newline at end of file diff --git a/src/dotnet9-sdk-installer.pkg b/src/dotnet9-sdk-installer.pkg deleted file mode 100644 index 3594dcd..0000000 --- a/src/dotnet9-sdk-installer.pkg +++ /dev/null @@ -1 +0,0 @@ -GatewayExceptionResponse \ No newline at end of file diff --git a/src/src/Managing.WebApp/src/generated/ManagingApi.ts b/src/src/Managing.WebApp/src/generated/ManagingApi.ts deleted file mode 100644 index bc52b57..0000000 --- a/src/src/Managing.WebApp/src/generated/ManagingApi.ts +++ /dev/null @@ -1,4535 +0,0 @@ -//---------------------- -// -// Generated using the NSwag toolchain v14.3.0.0 (NJsonSchema v11.2.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org) -// -//---------------------- - -import AuthorizedApiBase from "./AuthorizedApiBase"; -import IConfig from "./IConfig"; - -/* tslint:disable */ -/* eslint-disable */ -// ReSharper disable InconsistentNaming - -export class AccountClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - account_PostAccount(account: Account): Promise { - let url_ = this.baseUrl + "/Account"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(account); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processAccount_PostAccount(_response); - }); - } - - protected processAccount_PostAccount(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Account; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - account_GetAccount(name: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Account?"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processAccount_GetAccount(_response); - }); - } - - protected processAccount_GetAccount(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Account; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - account_DeleteAccount(name: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Account?"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "DELETE", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processAccount_DeleteAccount(_response); - }); - } - - protected processAccount_DeleteAccount(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - account_GetAccounts(): Promise { - let url_ = this.baseUrl + "/Account/accounts"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processAccount_GetAccounts(_response); - }); - } - - protected processAccount_GetAccounts(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Account[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - account_GetAccountsBalances(): Promise { - let url_ = this.baseUrl + "/Account/balances"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processAccount_GetAccountsBalances(_response); - }); - } - - protected processAccount_GetAccountsBalances(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Account[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - account_GetGmxClaimableSummary(name: string): Promise { - let url_ = this.baseUrl + "/Account/{name}/gmx-claimable-summary"; - if (name === undefined || name === null) - throw new Error("The parameter 'name' must be defined."); - url_ = url_.replace("{name}", encodeURIComponent("" + name)); - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processAccount_GetGmxClaimableSummary(_response); - }); - } - - protected processAccount_GetGmxClaimableSummary(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as GmxClaimableSummary; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - account_SwapGmxTokens(name: string, request: SwapTokensRequest): Promise { - let url_ = this.baseUrl + "/Account/{name}/gmx-swap"; - if (name === undefined || name === null) - throw new Error("The parameter 'name' must be defined."); - url_ = url_.replace("{name}", encodeURIComponent("" + name)); - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processAccount_SwapGmxTokens(_response); - }); - } - - protected processAccount_SwapGmxTokens(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as SwapInfos; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - account_SendToken(name: string, request: SendTokenRequest): Promise { - let url_ = this.baseUrl + "/Account/{name}/send-token"; - if (name === undefined || name === null) - throw new Error("The parameter 'name' must be defined."); - url_ = url_.replace("{name}", encodeURIComponent("" + name)); - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processAccount_SendToken(_response); - }); - } - - protected processAccount_SendToken(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as SwapInfos; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export class BacktestClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - backtest_Backtests(): Promise { - let url_ = this.baseUrl + "/Backtest"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_Backtests(_response); - }); - } - - protected processBacktest_Backtests(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Backtest[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_DeleteBacktest(id: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Backtest?"; - if (id !== undefined && id !== null) - url_ += "id=" + encodeURIComponent("" + id) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "DELETE", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_DeleteBacktest(_response); - }); - } - - protected processBacktest_DeleteBacktest(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_Map(moneyManagementRequest: MoneyManagementRequest): Promise { - let url_ = this.baseUrl + "/Backtest"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(moneyManagementRequest); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_Map(_response); - }); - } - - protected processBacktest_Map(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as MoneyManagement; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_Backtest(id: string): Promise { - let url_ = this.baseUrl + "/Backtest/{id}"; - if (id === undefined || id === null) - throw new Error("The parameter 'id' must be defined."); - url_ = url_.replace("{id}", encodeURIComponent("" + id)); - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_Backtest(_response); - }); - } - - protected processBacktest_Backtest(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Backtest; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_DeleteBacktests(request: DeleteBacktestsRequest): Promise { - let url_ = this.baseUrl + "/Backtest/multiple"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "DELETE", - headers: { - "Content-Type": "application/json", - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_DeleteBacktests(_response); - }); - } - - protected processBacktest_DeleteBacktests(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_GetBacktestsByRequestId(requestId: string): Promise { - let url_ = this.baseUrl + "/Backtest/ByRequestId/{requestId}"; - if (requestId === undefined || requestId === null) - throw new Error("The parameter 'requestId' must be defined."); - url_ = url_.replace("{requestId}", encodeURIComponent("" + requestId)); - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_GetBacktestsByRequestId(_response); - }); - } - - protected processBacktest_GetBacktestsByRequestId(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Backtest[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_GetBacktestsByRequestIdPaginated(requestId: string, page: number | undefined, pageSize: number | undefined, sortBy: string | null | undefined, sortOrder: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Backtest/ByRequestId/{requestId}/Paginated?"; - if (requestId === undefined || requestId === null) - throw new Error("The parameter 'requestId' must be defined."); - url_ = url_.replace("{requestId}", encodeURIComponent("" + requestId)); - if (page === null) - throw new Error("The parameter 'page' cannot be null."); - else if (page !== undefined) - url_ += "page=" + encodeURIComponent("" + page) + "&"; - if (pageSize === null) - throw new Error("The parameter 'pageSize' cannot be null."); - else if (pageSize !== undefined) - url_ += "pageSize=" + encodeURIComponent("" + pageSize) + "&"; - if (sortBy !== undefined && sortBy !== null) - url_ += "sortBy=" + encodeURIComponent("" + sortBy) + "&"; - if (sortOrder !== undefined && sortOrder !== null) - url_ += "sortOrder=" + encodeURIComponent("" + sortOrder) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_GetBacktestsByRequestIdPaginated(_response); - }); - } - - protected processBacktest_GetBacktestsByRequestIdPaginated(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as PaginatedBacktestsResponse; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_GetBacktestsPaginated(page: number | undefined, pageSize: number | undefined, sortBy: string | null | undefined, sortOrder: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Backtest/Paginated?"; - if (page === null) - throw new Error("The parameter 'page' cannot be null."); - else if (page !== undefined) - url_ += "page=" + encodeURIComponent("" + page) + "&"; - if (pageSize === null) - throw new Error("The parameter 'pageSize' cannot be null."); - else if (pageSize !== undefined) - url_ += "pageSize=" + encodeURIComponent("" + pageSize) + "&"; - if (sortBy !== undefined && sortBy !== null) - url_ += "sortBy=" + encodeURIComponent("" + sortBy) + "&"; - if (sortOrder !== undefined && sortOrder !== null) - url_ += "sortOrder=" + encodeURIComponent("" + sortOrder) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_GetBacktestsPaginated(_response); - }); - } - - protected processBacktest_GetBacktestsPaginated(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as PaginatedBacktestsResponse; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_Run(request: RunBacktestRequest): Promise { - let url_ = this.baseUrl + "/Backtest/Run"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_Run(_response); - }); - } - - protected processBacktest_Run(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Backtest; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_RunBundle(request: RunBundleBacktestRequest): Promise { - let url_ = this.baseUrl + "/Backtest/BacktestBundle"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_RunBundle(_response); - }); - } - - protected processBacktest_RunBundle(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as BundleBacktestRequest; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_GetBundleBacktestRequests(): Promise { - let url_ = this.baseUrl + "/Backtest/Bundle"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_GetBundleBacktestRequests(_response); - }); - } - - protected processBacktest_GetBundleBacktestRequests(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as BundleBacktestRequest[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_GetBundleBacktestRequest(id: string): Promise { - let url_ = this.baseUrl + "/Backtest/Bundle/{id}"; - if (id === undefined || id === null) - throw new Error("The parameter 'id' must be defined."); - url_ = url_.replace("{id}", encodeURIComponent("" + id)); - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_GetBundleBacktestRequest(_response); - }); - } - - protected processBacktest_GetBundleBacktestRequest(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as BundleBacktestRequest; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_DeleteBundleBacktestRequest(id: string): Promise { - let url_ = this.baseUrl + "/Backtest/Bundle/{id}"; - if (id === undefined || id === null) - throw new Error("The parameter 'id' must be defined."); - url_ = url_.replace("{id}", encodeURIComponent("" + id)); - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "DELETE", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_DeleteBundleBacktestRequest(_response); - }); - } - - protected processBacktest_DeleteBundleBacktestRequest(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_SubscribeToBundle(requestId: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Backtest/Bundle/Subscribe?"; - if (requestId !== undefined && requestId !== null) - url_ += "requestId=" + encodeURIComponent("" + requestId) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "POST", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_SubscribeToBundle(_response); - }); - } - - protected processBacktest_SubscribeToBundle(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_UnsubscribeFromBundle(requestId: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Backtest/Bundle/Unsubscribe?"; - if (requestId !== undefined && requestId !== null) - url_ += "requestId=" + encodeURIComponent("" + requestId) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "POST", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_UnsubscribeFromBundle(_response); - }); - } - - protected processBacktest_UnsubscribeFromBundle(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_RunGenetic(request: RunGeneticRequest): Promise { - let url_ = this.baseUrl + "/Backtest/Genetic"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_RunGenetic(_response); - }); - } - - protected processBacktest_RunGenetic(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as GeneticRequest; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_GetGeneticRequests(): Promise { - let url_ = this.baseUrl + "/Backtest/Genetic"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_GetGeneticRequests(_response); - }); - } - - protected processBacktest_GetGeneticRequests(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as GeneticRequest[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_GetGeneticRequest(id: string): Promise { - let url_ = this.baseUrl + "/Backtest/Genetic/{id}"; - if (id === undefined || id === null) - throw new Error("The parameter 'id' must be defined."); - url_ = url_.replace("{id}", encodeURIComponent("" + id)); - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_GetGeneticRequest(_response); - }); - } - - protected processBacktest_GetGeneticRequest(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as GeneticRequest; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - backtest_DeleteGeneticRequest(id: string): Promise { - let url_ = this.baseUrl + "/Backtest/Genetic/{id}"; - if (id === undefined || id === null) - throw new Error("The parameter 'id' must be defined."); - url_ = url_.replace("{id}", encodeURIComponent("" + id)); - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "DELETE", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBacktest_DeleteGeneticRequest(_response); - }); - } - - protected processBacktest_DeleteGeneticRequest(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export class BotClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - bot_Start(request: StartBotRequest): Promise { - let url_ = this.baseUrl + "/Bot/Start"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_Start(_response); - }); - } - - protected processBot_Start(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_Stop(identifier: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Bot/Stop?"; - if (identifier !== undefined && identifier !== null) - url_ += "identifier=" + encodeURIComponent("" + identifier) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_Stop(_response); - }); - } - - protected processBot_Stop(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_Delete(identifier: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Bot/Delete?"; - if (identifier !== undefined && identifier !== null) - url_ += "identifier=" + encodeURIComponent("" + identifier) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "DELETE", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_Delete(_response); - }); - } - - protected processBot_Delete(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as boolean; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_StopAll(): Promise { - let url_ = this.baseUrl + "/Bot/stop-all"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "POST", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_StopAll(_response); - }); - } - - protected processBot_StopAll(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_Restart(botType: BotType | undefined, identifier: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Bot/Restart?"; - if (botType === null) - throw new Error("The parameter 'botType' cannot be null."); - else if (botType !== undefined) - url_ += "botType=" + encodeURIComponent("" + botType) + "&"; - if (identifier !== undefined && identifier !== null) - url_ += "identifier=" + encodeURIComponent("" + identifier) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_Restart(_response); - }); - } - - protected processBot_Restart(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_RestartAll(): Promise { - let url_ = this.baseUrl + "/Bot/restart-all"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "POST", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_RestartAll(_response); - }); - } - - protected processBot_RestartAll(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_ToggleIsForWatching(identifier: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Bot/ToggleIsForWatching?"; - if (identifier !== undefined && identifier !== null) - url_ += "identifier=" + encodeURIComponent("" + identifier) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_ToggleIsForWatching(_response); - }); - } - - protected processBot_ToggleIsForWatching(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_GetActiveBots(): Promise { - let url_ = this.baseUrl + "/Bot"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_GetActiveBots(_response); - }); - } - - protected processBot_GetActiveBots(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TradingBotResponse[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_Map(moneyManagementRequest: MoneyManagementRequest): Promise { - let url_ = this.baseUrl + "/Bot"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(moneyManagementRequest); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_Map(_response); - }); - } - - protected processBot_Map(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as MoneyManagement; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_OpenPositionManually(request: OpenPositionManuallyRequest): Promise { - let url_ = this.baseUrl + "/Bot/OpenPosition"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_OpenPositionManually(_response); - }); - } - - protected processBot_OpenPositionManually(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Position; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_ClosePosition(request: ClosePositionRequest): Promise { - let url_ = this.baseUrl + "/Bot/ClosePosition"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_ClosePosition(_response); - }); - } - - protected processBot_ClosePosition(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Position; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - bot_UpdateBotConfig(request: UpdateBotConfigRequest): Promise { - let url_ = this.baseUrl + "/Bot/UpdateConfig"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "PUT", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processBot_UpdateBotConfig(_response); - }); - } - - protected processBot_UpdateBotConfig(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export class DataClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - data_GetTickers(timeframe: Timeframe | undefined): Promise { - let url_ = this.baseUrl + "/Data/GetTickers?"; - if (timeframe === null) - throw new Error("The parameter 'timeframe' cannot be null."); - else if (timeframe !== undefined) - url_ += "timeframe=" + encodeURIComponent("" + timeframe) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "POST", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetTickers(_response); - }); - } - - protected processData_GetTickers(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TickerInfos[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - data_GetSpotlight(): Promise { - let url_ = this.baseUrl + "/Data/Spotlight"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetSpotlight(_response); - }); - } - - protected processData_GetSpotlight(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as SpotlightOverview; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - data_GetCandlesWithIndicators(request: GetCandlesWithIndicatorsRequest): Promise { - let url_ = this.baseUrl + "/Data/GetCandlesWithIndicators"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(request); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetCandlesWithIndicators(_response); - }); - } - - protected processData_GetCandlesWithIndicators(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as CandlesWithIndicatorsResponse; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - data_GetStrategiesStatistics(): Promise { - let url_ = this.baseUrl + "/Data/GetStrategiesStatistics"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetStrategiesStatistics(_response); - }); - } - - protected processData_GetStrategiesStatistics(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as StrategiesStatisticsViewModel; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - data_GetTopStrategies(): Promise { - let url_ = this.baseUrl + "/Data/GetTopStrategies"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetTopStrategies(_response); - }); - } - - protected processData_GetTopStrategies(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TopStrategiesViewModel; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - data_GetUserStrategies(agentName: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Data/GetUserStrategies?"; - if (agentName !== undefined && agentName !== null) - url_ += "agentName=" + encodeURIComponent("" + agentName) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetUserStrategies(_response); - }); - } - - protected processData_GetUserStrategies(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as UserStrategyDetailsViewModel[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - data_GetUserStrategy(agentName: string | null | undefined, strategyName: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Data/GetUserStrategy?"; - if (agentName !== undefined && agentName !== null) - url_ += "agentName=" + encodeURIComponent("" + agentName) + "&"; - if (strategyName !== undefined && strategyName !== null) - url_ += "strategyName=" + encodeURIComponent("" + strategyName) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetUserStrategy(_response); - }); - } - - protected processData_GetUserStrategy(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as UserStrategyDetailsViewModel; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - data_GetPlatformSummary(timeFilter: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Data/GetPlatformSummary?"; - if (timeFilter !== undefined && timeFilter !== null) - url_ += "timeFilter=" + encodeURIComponent("" + timeFilter) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetPlatformSummary(_response); - }); - } - - protected processData_GetPlatformSummary(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as PlatformSummaryViewModel; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - data_GetAgentIndex(timeFilter: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Data/GetAgentIndex?"; - if (timeFilter !== undefined && timeFilter !== null) - url_ += "timeFilter=" + encodeURIComponent("" + timeFilter) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetAgentIndex(_response); - }); - } - - protected processData_GetAgentIndex(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as AgentIndexViewModel; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - data_GetAgentBalances(agentName: string | null | undefined, startDate: Date | undefined, endDate: Date | null | undefined): Promise { - let url_ = this.baseUrl + "/Data/GetAgentBalances?"; - if (agentName !== undefined && agentName !== null) - url_ += "agentName=" + encodeURIComponent("" + agentName) + "&"; - if (startDate === null) - throw new Error("The parameter 'startDate' cannot be null."); - else if (startDate !== undefined) - url_ += "startDate=" + encodeURIComponent(startDate ? "" + startDate.toISOString() : "") + "&"; - if (endDate !== undefined && endDate !== null) - url_ += "endDate=" + encodeURIComponent(endDate ? "" + endDate.toISOString() : "") + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetAgentBalances(_response); - }); - } - - protected processData_GetAgentBalances(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as AgentBalanceHistory; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - data_GetBestAgents(startDate: Date | undefined, endDate: Date | null | undefined, page: number | undefined, pageSize: number | undefined): Promise { - let url_ = this.baseUrl + "/Data/GetBestAgents?"; - if (startDate === null) - throw new Error("The parameter 'startDate' cannot be null."); - else if (startDate !== undefined) - url_ += "startDate=" + encodeURIComponent(startDate ? "" + startDate.toISOString() : "") + "&"; - if (endDate !== undefined && endDate !== null) - url_ += "endDate=" + encodeURIComponent(endDate ? "" + endDate.toISOString() : "") + "&"; - if (page === null) - throw new Error("The parameter 'page' cannot be null."); - else if (page !== undefined) - url_ += "page=" + encodeURIComponent("" + page) + "&"; - if (pageSize === null) - throw new Error("The parameter 'pageSize' cannot be null."); - else if (pageSize !== undefined) - url_ += "pageSize=" + encodeURIComponent("" + pageSize) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetBestAgents(_response); - }); - } - - protected processData_GetBestAgents(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as BestAgentsResponse; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export class MoneyManagementClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - moneyManagement_PostMoneyManagement(moneyManagement: MoneyManagement): Promise { - let url_ = this.baseUrl + "/MoneyManagement"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(moneyManagement); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processMoneyManagement_PostMoneyManagement(_response); - }); - } - - protected processMoneyManagement_PostMoneyManagement(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as MoneyManagement; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - moneyManagement_GetMoneyManagement(name: string | null | undefined): Promise { - let url_ = this.baseUrl + "/MoneyManagement?"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processMoneyManagement_GetMoneyManagement(_response); - }); - } - - protected processMoneyManagement_GetMoneyManagement(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as MoneyManagement; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - moneyManagement_DeleteMoneyManagement(name: string | null | undefined): Promise { - let url_ = this.baseUrl + "/MoneyManagement?"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "DELETE", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processMoneyManagement_DeleteMoneyManagement(_response); - }); - } - - protected processMoneyManagement_DeleteMoneyManagement(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - moneyManagement_GetMoneyManagements(): Promise { - let url_ = this.baseUrl + "/MoneyManagement/moneymanagements"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processMoneyManagement_GetMoneyManagements(_response); - }); - } - - protected processMoneyManagement_GetMoneyManagements(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as MoneyManagement[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export class ScenarioClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - scenario_GetScenarios(): Promise { - let url_ = this.baseUrl + "/Scenario"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processScenario_GetScenarios(_response); - }); - } - - protected processScenario_GetScenarios(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ScenarioViewModel[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - scenario_CreateScenario(name: string | null | undefined, loopbackPeriod: number | null | undefined, strategies: string[]): Promise { - let url_ = this.baseUrl + "/Scenario?"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - if (loopbackPeriod !== undefined && loopbackPeriod !== null) - url_ += "loopbackPeriod=" + encodeURIComponent("" + loopbackPeriod) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(strategies); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processScenario_CreateScenario(_response); - }); - } - - protected processScenario_CreateScenario(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ScenarioViewModel; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - scenario_DeleteScenario(name: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Scenario?"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "DELETE", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processScenario_DeleteScenario(_response); - }); - } - - protected processScenario_DeleteScenario(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - scenario_UpdateScenario(name: string | null | undefined, loopbackPeriod: number | null | undefined, strategies: string[]): Promise { - let url_ = this.baseUrl + "/Scenario?"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - if (loopbackPeriod !== undefined && loopbackPeriod !== null) - url_ += "loopbackPeriod=" + encodeURIComponent("" + loopbackPeriod) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(strategies); - - let options_: RequestInit = { - body: content_, - method: "PUT", - headers: { - "Content-Type": "application/json", - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processScenario_UpdateScenario(_response); - }); - } - - protected processScenario_UpdateScenario(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - scenario_GetIndicators(): Promise { - let url_ = this.baseUrl + "/Scenario/indicator"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processScenario_GetIndicators(_response); - }); - } - - protected processScenario_GetIndicators(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as IndicatorViewModel[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - scenario_CreateIndicator(indicatorType: IndicatorType | undefined, name: string | null | undefined, period: number | null | undefined, fastPeriods: number | null | undefined, slowPeriods: number | null | undefined, signalPeriods: number | null | undefined, multiplier: number | null | undefined, stochPeriods: number | null | undefined, smoothPeriods: number | null | undefined, cyclePeriods: number | null | undefined): Promise { - let url_ = this.baseUrl + "/Scenario/indicator?"; - if (indicatorType === null) - throw new Error("The parameter 'indicatorType' cannot be null."); - else if (indicatorType !== undefined) - url_ += "indicatorType=" + encodeURIComponent("" + indicatorType) + "&"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - if (period !== undefined && period !== null) - url_ += "period=" + encodeURIComponent("" + period) + "&"; - if (fastPeriods !== undefined && fastPeriods !== null) - url_ += "fastPeriods=" + encodeURIComponent("" + fastPeriods) + "&"; - if (slowPeriods !== undefined && slowPeriods !== null) - url_ += "slowPeriods=" + encodeURIComponent("" + slowPeriods) + "&"; - if (signalPeriods !== undefined && signalPeriods !== null) - url_ += "signalPeriods=" + encodeURIComponent("" + signalPeriods) + "&"; - if (multiplier !== undefined && multiplier !== null) - url_ += "multiplier=" + encodeURIComponent("" + multiplier) + "&"; - if (stochPeriods !== undefined && stochPeriods !== null) - url_ += "stochPeriods=" + encodeURIComponent("" + stochPeriods) + "&"; - if (smoothPeriods !== undefined && smoothPeriods !== null) - url_ += "smoothPeriods=" + encodeURIComponent("" + smoothPeriods) + "&"; - if (cyclePeriods !== undefined && cyclePeriods !== null) - url_ += "cyclePeriods=" + encodeURIComponent("" + cyclePeriods) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "POST", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processScenario_CreateIndicator(_response); - }); - } - - protected processScenario_CreateIndicator(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as IndicatorViewModel; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - scenario_DeleteIndicator(name: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Scenario/indicator?"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "DELETE", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processScenario_DeleteIndicator(_response); - }); - } - - protected processScenario_DeleteIndicator(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - scenario_Updateindicator(indicatorType: IndicatorType | undefined, name: string | null | undefined, period: number | null | undefined, fastPeriods: number | null | undefined, slowPeriods: number | null | undefined, signalPeriods: number | null | undefined, multiplier: number | null | undefined, stochPeriods: number | null | undefined, smoothPeriods: number | null | undefined, cyclePeriods: number | null | undefined): Promise { - let url_ = this.baseUrl + "/Scenario/indicator?"; - if (indicatorType === null) - throw new Error("The parameter 'indicatorType' cannot be null."); - else if (indicatorType !== undefined) - url_ += "indicatorType=" + encodeURIComponent("" + indicatorType) + "&"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - if (period !== undefined && period !== null) - url_ += "period=" + encodeURIComponent("" + period) + "&"; - if (fastPeriods !== undefined && fastPeriods !== null) - url_ += "fastPeriods=" + encodeURIComponent("" + fastPeriods) + "&"; - if (slowPeriods !== undefined && slowPeriods !== null) - url_ += "slowPeriods=" + encodeURIComponent("" + slowPeriods) + "&"; - if (signalPeriods !== undefined && signalPeriods !== null) - url_ += "signalPeriods=" + encodeURIComponent("" + signalPeriods) + "&"; - if (multiplier !== undefined && multiplier !== null) - url_ += "multiplier=" + encodeURIComponent("" + multiplier) + "&"; - if (stochPeriods !== undefined && stochPeriods !== null) - url_ += "stochPeriods=" + encodeURIComponent("" + stochPeriods) + "&"; - if (smoothPeriods !== undefined && smoothPeriods !== null) - url_ += "smoothPeriods=" + encodeURIComponent("" + smoothPeriods) + "&"; - if (cyclePeriods !== undefined && cyclePeriods !== null) - url_ += "cyclePeriods=" + encodeURIComponent("" + cyclePeriods) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "PUT", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processScenario_Updateindicator(_response); - }); - } - - protected processScenario_Updateindicator(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export class SentryTestClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - sentryTest_TestException(): Promise { - let url_ = this.baseUrl + "/api/SentryTest/test-exception"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processSentryTest_TestException(_response); - }); - } - - protected processSentryTest_TestException(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - sentryTest_ThrowException(): Promise { - let url_ = this.baseUrl + "/api/SentryTest/throw-exception"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processSentryTest_ThrowException(_response); - }); - } - - protected processSentryTest_ThrowException(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - sentryTest_TestMessage(): Promise { - let url_ = this.baseUrl + "/api/SentryTest/test-message"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processSentryTest_TestMessage(_response); - }); - } - - protected processSentryTest_TestMessage(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export class SettingsClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - settings_SetupSettings(): Promise { - let url_ = this.baseUrl + "/Settings"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "POST", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processSettings_SetupSettings(_response); - }); - } - - protected processSettings_SetupSettings(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as boolean; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - settings_ResetSettings(): Promise { - let url_ = this.baseUrl + "/Settings"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "DELETE", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processSettings_ResetSettings(_response); - }); - } - - protected processSettings_ResetSettings(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as boolean; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - settings_CreateDefaultConfiguration(): Promise { - let url_ = this.baseUrl + "/Settings/create-default-config"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "POST", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processSettings_CreateDefaultConfiguration(_response); - }); - } - - protected processSettings_CreateDefaultConfiguration(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as boolean; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export class TradingClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - trading_GetTrade(accountName: string | null | undefined, ticker: Ticker | undefined, exchangeOrderId: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Trading/GetTrade?"; - if (accountName !== undefined && accountName !== null) - url_ += "accountName=" + encodeURIComponent("" + accountName) + "&"; - if (ticker === null) - throw new Error("The parameter 'ticker' cannot be null."); - else if (ticker !== undefined) - url_ += "ticker=" + encodeURIComponent("" + ticker) + "&"; - if (exchangeOrderId !== undefined && exchangeOrderId !== null) - url_ += "exchangeOrderId=" + encodeURIComponent("" + exchangeOrderId) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processTrading_GetTrade(_response); - }); - } - - protected processTrading_GetTrade(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Trade; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - trading_GetTrades(accountName: string | null | undefined, ticker: Ticker | undefined): Promise { - let url_ = this.baseUrl + "/Trading/GetTrades?"; - if (accountName !== undefined && accountName !== null) - url_ += "accountName=" + encodeURIComponent("" + accountName) + "&"; - if (ticker === null) - throw new Error("The parameter 'ticker' cannot be null."); - else if (ticker !== undefined) - url_ += "ticker=" + encodeURIComponent("" + ticker) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processTrading_GetTrades(_response); - }); - } - - protected processTrading_GetTrades(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Trade; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - trading_ClosePosition(identifier: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Trading/ClosePosition?"; - if (identifier !== undefined && identifier !== null) - url_ += "identifier=" + encodeURIComponent("" + identifier) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "POST", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processTrading_ClosePosition(_response); - }); - } - - protected processTrading_ClosePosition(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Position; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - trading_Trade(accountName: string | null | undefined, moneyManagementName: string | null | undefined, direction: TradeDirection | undefined, ticker: Ticker | undefined, riskLevel: RiskLevel | undefined, isForPaperTrading: boolean | undefined, openPrice: number | null | undefined, moneyManagement: MoneyManagement | undefined): Promise { - let url_ = this.baseUrl + "/Trading/OpenPosition?"; - if (accountName !== undefined && accountName !== null) - url_ += "accountName=" + encodeURIComponent("" + accountName) + "&"; - if (moneyManagementName !== undefined && moneyManagementName !== null) - url_ += "moneyManagementName=" + encodeURIComponent("" + moneyManagementName) + "&"; - if (direction === null) - throw new Error("The parameter 'direction' cannot be null."); - else if (direction !== undefined) - url_ += "direction=" + encodeURIComponent("" + direction) + "&"; - if (ticker === null) - throw new Error("The parameter 'ticker' cannot be null."); - else if (ticker !== undefined) - url_ += "ticker=" + encodeURIComponent("" + ticker) + "&"; - if (riskLevel === null) - throw new Error("The parameter 'riskLevel' cannot be null."); - else if (riskLevel !== undefined) - url_ += "riskLevel=" + encodeURIComponent("" + riskLevel) + "&"; - if (isForPaperTrading === null) - throw new Error("The parameter 'isForPaperTrading' cannot be null."); - else if (isForPaperTrading !== undefined) - url_ += "isForPaperTrading=" + encodeURIComponent("" + isForPaperTrading) + "&"; - if (openPrice !== undefined && openPrice !== null) - url_ += "openPrice=" + encodeURIComponent("" + openPrice) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(moneyManagement); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processTrading_Trade(_response); - }); - } - - protected processTrading_Trade(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Position; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - trading_InitPrivyWallet(publicAddress: string): Promise { - let url_ = this.baseUrl + "/Trading/InitPrivyWallet"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(publicAddress); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processTrading_InitPrivyWallet(_response); - }); - } - - protected processTrading_InitPrivyWallet(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as PrivyInitAddressResponse; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export class UserClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - user_CreateToken(login: LoginRequest): Promise { - let url_ = this.baseUrl + "/User"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(login); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processUser_CreateToken(_response); - }); - } - - protected processUser_CreateToken(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - user_GetCurrentUser(): Promise { - let url_ = this.baseUrl + "/User"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processUser_GetCurrentUser(_response); - }); - } - - protected processUser_GetCurrentUser(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as User; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - user_UpdateAgentName(agentName: string): Promise { - let url_ = this.baseUrl + "/User/agent-name"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(agentName); - - let options_: RequestInit = { - body: content_, - method: "PUT", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processUser_UpdateAgentName(_response); - }); - } - - protected processUser_UpdateAgentName(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as User; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - user_UpdateAvatarUrl(avatarUrl: string): Promise { - let url_ = this.baseUrl + "/User/avatar"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(avatarUrl); - - let options_: RequestInit = { - body: content_, - method: "PUT", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processUser_UpdateAvatarUrl(_response); - }); - } - - protected processUser_UpdateAvatarUrl(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as User; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - user_UpdateTelegramChannel(telegramChannel: string): Promise { - let url_ = this.baseUrl + "/User/telegram-channel"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(telegramChannel); - - let options_: RequestInit = { - body: content_, - method: "PUT", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processUser_UpdateTelegramChannel(_response); - }); - } - - protected processUser_UpdateTelegramChannel(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as User; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - user_TestTelegramChannel(): Promise { - let url_ = this.baseUrl + "/User/telegram-channel/test"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "POST", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processUser_TestTelegramChannel(_response); - }); - } - - protected processUser_TestTelegramChannel(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export class WorkflowClient extends AuthorizedApiBase { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(configuration: IConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - super(configuration); - this.http = http ? http : window as any; - this.baseUrl = baseUrl ?? "http://localhost:5000"; - } - - workflow_PostWorkflow(workflowRequest: SyntheticWorkflow): Promise { - let url_ = this.baseUrl + "/Workflow"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(workflowRequest); - - let options_: RequestInit = { - body: content_, - method: "POST", - headers: { - "Content-Type": "application/json", - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processWorkflow_PostWorkflow(_response); - }); - } - - protected processWorkflow_PostWorkflow(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as Workflow; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - workflow_GetWorkflows(): Promise { - let url_ = this.baseUrl + "/Workflow"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processWorkflow_GetWorkflows(_response); - }); - } - - protected processWorkflow_GetWorkflows(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as SyntheticWorkflow[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - workflow_DeleteWorkflow(name: string | null | undefined): Promise { - let url_ = this.baseUrl + "/Workflow?"; - if (name !== undefined && name !== null) - url_ += "name=" + encodeURIComponent("" + name) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "DELETE", - headers: { - "Accept": "application/octet-stream" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processWorkflow_DeleteWorkflow(_response); - }); - } - - protected processWorkflow_DeleteWorkflow(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - - workflow_GetAvailableFlows(): Promise { - let url_ = this.baseUrl + "/Workflow/flows"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processWorkflow_GetAvailableFlows(_response); - }); - } - - protected processWorkflow_GetAvailableFlows(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as IFlow[]; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } -} - -export interface Account { - name: string; - exchange: TradingExchanges; - type: AccountType; - key?: string | null; - secret?: string | null; - user?: User | null; - balances?: Balance[] | null; - isPrivyWallet?: boolean; -} - -export enum TradingExchanges { - Binance = "Binance", - Kraken = "Kraken", - Ftx = "Ftx", - Evm = "Evm", - GmxV2 = "GmxV2", -} - -export enum AccountType { - Cex = "Cex", - Trader = "Trader", - Watch = "Watch", - Auth = "Auth", - Privy = "Privy", -} - -export interface User { - name?: string | null; - accounts?: Account[] | null; - agentName?: string | null; - avatarUrl?: string | null; - telegramChannel?: string | null; -} - -export interface Balance { - tokenImage?: string | null; - tokenName?: string | null; - amount?: number; - price?: number; - value?: number; - tokenAdress?: string | null; - chain?: Chain | null; -} - -export interface Chain { - id?: string | null; - rpcUrl?: string | null; - name?: string | null; - chainId?: number; -} - -export interface GmxClaimableSummary { - claimableFundingFees?: FundingFeesData | null; - claimableUiFees?: UiFeesData | null; - rebateStats?: RebateStatsData | null; -} - -export interface FundingFeesData { - totalUsdc?: number; -} - -export interface UiFeesData { - totalUsdc?: number; -} - -export interface RebateStatsData { - totalRebateUsdc?: number; - discountUsdc?: number; - rebateFactor?: number; - discountFactor?: number; -} - -export interface SwapInfos { - success?: boolean; - hash?: string | null; - message?: string | null; - error?: string | null; - errorType?: string | null; - suggestion?: string | null; -} - -export interface SwapTokensRequest { - fromTicker: Ticker; - toTicker: Ticker; - amount: number; - orderType?: string | null; - triggerRatio?: number | null; - allowedSlippage?: number; -} - -export enum Ticker { - AAVE = "AAVE", - ADA = "ADA", - APE = "APE", - ALGO = "ALGO", - ARB = "ARB", - ATOM = "ATOM", - AVAX = "AVAX", - BNB = "BNB", - BTC = "BTC", - BAL = "BAL", - CHZ = "CHZ", - COMP = "COMP", - CRO = "CRO", - CRV = "CRV", - DOGE = "DOGE", - DOT = "DOT", - DYDX = "DYDX", - ENS = "ENS", - ETC = "ETC", - ETH = "ETH", - FIL = "FIL", - FLM = "FLM", - FTM = "FTM", - GALA = "GALA", - GMX = "GMX", - GRT = "GRT", - IMX = "IMX", - JASMY = "JASMY", - KSM = "KSM", - LDO = "LDO", - LINK = "LINK", - LRC = "LRC", - LTC = "LTC", - MANA = "MANA", - MATIC = "MATIC", - MKR = "MKR", - NEAR = "NEAR", - OP = "OP", - PEPE = "PEPE", - QTUM = "QTUM", - REN = "REN", - ROSE = "ROSE", - RSR = "RSR", - RUNE = "RUNE", - SAND = "SAND", - SOL = "SOL", - SRM = "SRM", - SUSHI = "SUSHI", - THETA = "THETA", - UNI = "UNI", - USDC = "USDC", - USDT = "USDT", - WIF = "WIF", - XMR = "XMR", - XRP = "XRP", - XTZ = "XTZ", - SHIB = "SHIB", - STX = "STX", - ORDI = "ORDI", - APT = "APT", - BOME = "BOME", - MEME = "MEME", - FLOKI = "FLOKI", - MEW = "MEW", - TAO = "TAO", - BONK = "BONK", - WLD = "WLD", - TBTC = "tBTC", - WBTC_b = "WBTC_b", - EIGEN = "EIGEN", - SUI = "SUI", - SEI = "SEI", - USDC_e = "USDC_e", - DAI = "DAI", - TIA = "TIA", - TRX = "TRX", - TON = "TON", - PENDLE = "PENDLE", - WstETH = "wstETH", - USDe = "USDe", - SATS = "SATS", - POL = "POL", - XLM = "XLM", - BCH = "BCH", - ICP = "ICP", - RENDER = "RENDER", - INJ = "INJ", - TRUMP = "TRUMP", - MELANIA = "MELANIA", - ENA = "ENA", - FARTCOIN = "FARTCOIN", - AI16Z = "AI16Z", - ANIME = "ANIME", - BERA = "BERA", - VIRTUAL = "VIRTUAL", - PENGU = "PENGU", - ONDO = "ONDO", - FET = "FET", - AIXBT = "AIXBT", - CAKE = "CAKE", - S = "S", - JUP = "JUP", - HYPE = "HYPE", - OM = "OM", - DOLO = "DOLO", - Unknown = "Unknown", -} - -export interface SendTokenRequest { - recipientAddress: string; - ticker: Ticker; - amount: number; - chainId?: number | null; -} - -export interface Backtest { - id: string; - finalPnl: number; - winRate: number; - growthPercentage: number; - hodlPercentage: number; - config: TradingBotConfig; - positions: Position[]; - signals: LightSignal[]; - candles: Candle[]; - startDate: Date; - endDate: Date; - statistics: PerformanceMetrics; - fees: number; - walletBalances: KeyValuePairOfDateTimeAndDecimal[]; - user: User; - indicatorsValues: { [key in keyof typeof IndicatorType]?: IndicatorsResultBase; }; - score: number; - requestId?: string; - metadata?: any | null; - scoreMessage?: string; -} - -export interface TradingBotConfig { - accountName: string; - moneyManagement: LightMoneyManagement; - ticker: Ticker; - timeframe: Timeframe; - isForWatchingOnly: boolean; - botTradingBalance: number; - isForBacktest: boolean; - cooldownPeriod: number; - maxLossStreak: number; - flipPosition: boolean; - name: string; - riskManagement?: RiskManagement | null; - scenario?: Scenario | null; - scenarioName?: string | null; - maxPositionTimeHours?: number | null; - closeEarlyWhenProfitable?: boolean; - flipOnlyWhenInProfit: boolean; - useSynthApi?: boolean; - useForPositionSizing?: boolean; - useForSignalFiltering?: boolean; - useForDynamicStopLoss?: boolean; -} - -export interface LightMoneyManagement { - name: string; - timeframe: Timeframe; - stopLoss: number; - takeProfit: number; - leverage: number; -} - -export enum Timeframe { - FiveMinutes = "FiveMinutes", - FifteenMinutes = "FifteenMinutes", - ThirtyMinutes = "ThirtyMinutes", - OneHour = "OneHour", - FourHour = "FourHour", - OneDay = "OneDay", - OneMinute = "OneMinute", -} - -export interface RiskManagement { - adverseProbabilityThreshold: number; - favorableProbabilityThreshold: number; - riskAversion: number; - kellyMinimumThreshold: number; - kellyMaximumCap: number; - maxLiquidationProbability: number; - signalValidationTimeHorizonHours: number; - positionMonitoringTimeHorizonHours: number; - positionWarningThreshold: number; - positionAutoCloseThreshold: number; - kellyFractionalMultiplier: number; - riskTolerance: RiskToleranceLevel; - useExpectedUtility: boolean; - useKellyCriterion: boolean; -} - -export enum RiskToleranceLevel { - Conservative = "Conservative", - Moderate = "Moderate", - Aggressive = "Aggressive", -} - -export interface Scenario { - name?: string | null; - indicators?: Indicator[] | null; - loopbackPeriod?: number | null; - user?: User | null; -} - -export interface Indicator { - name?: string | null; - type?: IndicatorType; - signalType?: SignalType; - minimumHistory?: number; - period?: number | null; - fastPeriods?: number | null; - slowPeriods?: number | null; - signalPeriods?: number | null; - multiplier?: number | null; - smoothPeriods?: number | null; - stochPeriods?: number | null; - cyclePeriods?: number | null; - user?: User | null; -} - -export enum IndicatorType { - RsiDivergence = "RsiDivergence", - RsiDivergenceConfirm = "RsiDivergenceConfirm", - MacdCross = "MacdCross", - EmaCross = "EmaCross", - ThreeWhiteSoldiers = "ThreeWhiteSoldiers", - SuperTrend = "SuperTrend", - ChandelierExit = "ChandelierExit", - EmaTrend = "EmaTrend", - Composite = "Composite", - StochRsiTrend = "StochRsiTrend", - Stc = "Stc", - StDev = "StDev", - LaggingStc = "LaggingStc", - SuperTrendCrossEma = "SuperTrendCrossEma", - DualEmaCross = "DualEmaCross", -} - -export enum SignalType { - Signal = "Signal", - Trend = "Trend", - Context = "Context", -} - -export interface Position { - accountName: string; - date: Date; - originDirection: TradeDirection; - ticker: Ticker; - moneyManagement: LightMoneyManagement; - Open: Trade; - StopLoss: Trade; - TakeProfit1: Trade; - TakeProfit2?: Trade | null; - ProfitAndLoss?: ProfitAndLoss | null; - status: PositionStatus; - signalIdentifier?: string | null; - identifier: string; - initiator: PositionInitiator; - user: User; -} - -export enum TradeDirection { - None = "None", - Short = "Short", - Long = "Long", -} - -export interface Trade { - fee: number; - date: Date; - direction: TradeDirection; - status: TradeStatus; - tradeType: TradeType; - ticker: Ticker; - quantity: number; - price: number; - leverage: number; - exchangeOrderId: string; - message: string; -} - -export enum TradeStatus { - PendingOpen = "PendingOpen", - Requested = "Requested", - Cancelled = "Cancelled", - Filled = "Filled", -} - -export enum TradeType { - Limit = "Limit", - Market = "Market", - StopMarket = "StopMarket", - StopLimit = "StopLimit", - StopLoss = "StopLoss", - TakeProfit = "TakeProfit", - StopLossProfit = "StopLossProfit", - StopLossProfitLimit = "StopLossProfitLimit", - StopLossLimit = "StopLossLimit", - TakeProfitLimit = "TakeProfitLimit", - TrailingStop = "TrailingStop", - TrailingStopLimit = "TrailingStopLimit", - StopLossAndLimit = "StopLossAndLimit", - SettlePosition = "SettlePosition", -} - -export interface ProfitAndLoss { - realized?: number; - net?: number; - averageOpenPrice?: number; -} - -export enum PositionStatus { - New = "New", - Canceled = "Canceled", - Rejected = "Rejected", - Updating = "Updating", - PartiallyFilled = "PartiallyFilled", - Filled = "Filled", - Flipped = "Flipped", - Finished = "Finished", -} - -export enum PositionInitiator { - PaperTrading = "PaperTrading", - Bot = "Bot", - User = "User", - CopyTrading = "CopyTrading", -} - -export interface ValueObject { -} - -export interface LightSignal extends ValueObject { - status: SignalStatus; - direction: TradeDirection; - confidence: Confidence; - timeframe: Timeframe; - date: Date; - candle: Candle; - identifier: string; - ticker: Ticker; - exchange: TradingExchanges; - indicatorType: IndicatorType; - signalType: SignalType; - indicatorName: string; -} - -export enum SignalStatus { - WaitingForPosition = "WaitingForPosition", - PositionOpen = "PositionOpen", - Expired = "Expired", -} - -export enum Confidence { - Low = "Low", - Medium = "Medium", - High = "High", - None = "None", -} - -export interface Candle { - exchange: TradingExchanges; - ticker: string; - openTime: Date; - date: Date; - open: number; - close: number; - high: number; - low: number; - timeframe: Timeframe; - volume?: number; -} - -export interface PerformanceMetrics { - count?: number; - sharpeRatio?: number; - maxDrawdown?: number; - maxDrawdownPc?: number; - maxDrawdownRecoveryTime?: string; - winningTrades?: number; - loosingTrades?: number; - totalPnL?: number; -} - -export interface KeyValuePairOfDateTimeAndDecimal { - key?: Date; - value?: number; -} - -export interface IndicatorsResultBase { - ema?: EmaResult[] | null; - fastEma?: EmaResult[] | null; - slowEma?: EmaResult[] | null; - macd?: MacdResult[] | null; - rsi?: RsiResult[] | null; - stoch?: StochResult[] | null; - stochRsi?: StochRsiResult[] | null; - bollingerBands?: BollingerBandsResult[] | null; - chandelierShort?: ChandelierResult[] | null; - stc?: StcResult[] | null; - stdDev?: StdDevResult[] | null; - superTrend?: SuperTrendResult[] | null; - chandelierLong?: ChandelierResult[] | null; -} - -export interface ResultBase { - date?: Date; -} - -export interface EmaResult extends ResultBase { - ema?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface MacdResult extends ResultBase { - macd?: number | null; - signal?: number | null; - histogram?: number | null; - fastEma?: number | null; - slowEma?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface RsiResult extends ResultBase { - rsi?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -/** Stochastic indicator results includes aliases for those who prefer the simpler K,D,J outputs. See documentation for more information. */ -export interface StochResult extends ResultBase { - oscillator?: number | null; - signal?: number | null; - percentJ?: number | null; - k?: number | null; - d?: number | null; - j?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface StochRsiResult extends ResultBase { - stochRsi?: number | null; - signal?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface BollingerBandsResult extends ResultBase { - sma?: number | null; - upperBand?: number | null; - lowerBand?: number | null; - percentB?: number | null; - zScore?: number | null; - width?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface ChandelierResult extends ResultBase { - chandelierExit?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface StcResult extends ResultBase { - stc?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface StdDevResult extends ResultBase { - stdDev?: number | null; - mean?: number | null; - zScore?: number | null; - stdDevSma?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface SuperTrendResult extends ResultBase { - superTrend?: number | null; - upperBand?: number | null; - lowerBand?: number | null; -} - -export interface DeleteBacktestsRequest { - backtestIds: string[]; -} - -export interface PaginatedBacktestsResponse { - backtests?: LightBacktestResponse[] | null; - totalCount?: number; - currentPage?: number; - pageSize?: number; - totalPages?: number; - hasNextPage?: boolean; - hasPreviousPage?: boolean; -} - -export interface LightBacktestResponse { - id: string; - config: TradingBotConfig; - finalPnl: number; - winRate: number; - growthPercentage: number; - hodlPercentage: number; - startDate: Date; - endDate: Date; - maxDrawdown: number; - fees: number; - sharpeRatio: number; - score: number; - scoreMessage: string; -} - -export interface RunBacktestRequest { - config?: TradingBotConfigRequest | null; - startDate?: Date; - endDate?: Date; - save?: boolean; - withCandles?: boolean; -} - -export interface TradingBotConfigRequest { - accountName: string; - ticker: Ticker; - timeframe: Timeframe; - isForWatchingOnly: boolean; - botTradingBalance: number; - name: string; - flipPosition: boolean; - cooldownPeriod: number; - maxLossStreak: number; - scenario?: ScenarioRequest | null; - scenarioName?: string | null; - moneyManagementName?: string | null; - moneyManagement?: MoneyManagementRequest | null; - maxPositionTimeHours?: number | null; - closeEarlyWhenProfitable?: boolean; - flipOnlyWhenInProfit?: boolean; - useSynthApi?: boolean; - useForPositionSizing?: boolean; - useForSignalFiltering?: boolean; - useForDynamicStopLoss?: boolean; -} - -export interface ScenarioRequest { - name: string; - indicators: IndicatorRequest[]; - loopbackPeriod?: number | null; -} - -export interface IndicatorRequest { - name: string; - type: IndicatorType; - signalType: SignalType; - minimumHistory?: number; - period?: number | null; - fastPeriods?: number | null; - slowPeriods?: number | null; - signalPeriods?: number | null; - multiplier?: number | null; - smoothPeriods?: number | null; - stochPeriods?: number | null; - cyclePeriods?: number | null; -} - -export interface MoneyManagementRequest { - name: string; - timeframe: Timeframe; - stopLoss: number; - takeProfit: number; - leverage: number; -} - -export interface BundleBacktestRequest { - requestId: string; - user: User; - createdAt: Date; - completedAt?: Date | null; - status: BundleBacktestRequestStatus; - name: string; - backtestRequestsJson: string; - results?: string[] | null; - totalBacktests: number; - completedBacktests: number; - failedBacktests: number; - progressPercentage?: number; - errorMessage?: string | null; - progressInfo?: string | null; - currentBacktest?: string | null; - estimatedTimeRemainingSeconds?: number | null; -} - -export enum BundleBacktestRequestStatus { - Pending = "Pending", - Running = "Running", - Completed = "Completed", - Failed = "Failed", - Cancelled = "Cancelled", -} - -export interface RunBundleBacktestRequest { - name: string; - requests: RunBacktestRequest[]; -} - -export interface GeneticRequest { - requestId: string; - user: User; - createdAt: Date; - completedAt?: Date | null; - status: GeneticRequestStatus; - ticker: Ticker; - timeframe: Timeframe; - startDate: Date; - endDate: Date; - balance: number; - populationSize: number; - generations: number; - mutationRate: number; - selectionMethod: GeneticSelectionMethod; - crossoverMethod: GeneticCrossoverMethod; - mutationMethod: GeneticMutationMethod; - elitismPercentage: number; - maxTakeProfit: number; - eligibleIndicators: IndicatorType[]; - results?: Backtest[] | null; - bestFitness?: number | null; - bestIndividual?: string | null; - errorMessage?: string | null; - progressInfo?: string | null; - bestChromosome?: string | null; - currentGeneration?: number; - bestFitnessSoFar?: number | null; -} - -export enum GeneticRequestStatus { - Pending = "Pending", - Running = "Running", - Completed = "Completed", - Failed = "Failed", - Cancelled = "Cancelled", -} - -export enum GeneticSelectionMethod { - Elite = "Elite", - Roulette = "Roulette", - StochasticUniversalSampling = "StochasticUniversalSampling", - Tournament = "Tournament", - Truncation = "Truncation", -} - -export enum GeneticCrossoverMethod { - AlternatingPosition = "AlternatingPosition", - CutAndSplice = "CutAndSplice", - Cycle = "Cycle", - OnePoint = "OnePoint", - OrderBased = "OrderBased", - Ordered = "Ordered", - PartiallyMapped = "PartiallyMapped", - PositionBased = "PositionBased", - ThreeParent = "ThreeParent", - TwoPoint = "TwoPoint", - Uniform = "Uniform", - VotingRecombination = "VotingRecombination", -} - -export enum GeneticMutationMethod { - Displacement = "Displacement", - FlipBit = "FlipBit", - Insertion = "Insertion", - PartialShuffle = "PartialShuffle", - ReverseSequence = "ReverseSequence", - Twors = "Twors", - Uniform = "Uniform", -} - -export interface RunGeneticRequest { - ticker?: Ticker; - timeframe?: Timeframe; - startDate?: Date; - endDate?: Date; - balance?: number; - populationSize?: number; - generations?: number; - mutationRate?: number; - selectionMethod?: GeneticSelectionMethod; - crossoverMethod?: GeneticCrossoverMethod; - mutationMethod?: GeneticMutationMethod; - elitismPercentage?: number; - maxTakeProfit?: number; - eligibleIndicators?: IndicatorType[] | null; -} - -export interface MoneyManagement extends LightMoneyManagement { - user?: User | null; -} - -export interface StartBotRequest { - config?: TradingBotConfigRequest | null; -} - -export enum BotType { - SimpleBot = "SimpleBot", - ScalpingBot = "ScalpingBot", - FlippingBot = "FlippingBot", -} - -export interface TradingBotResponse { - status: string; - signals: LightSignal[]; - positions: Position[]; - candles: Candle[]; - winRate: number; - profitAndLoss: number; - identifier: string; - agentName: string; - config: TradingBotConfig; - createDate: Date; - startupTime: Date; -} - -export interface OpenPositionManuallyRequest { - identifier?: string | null; - direction?: TradeDirection; -} - -export interface ClosePositionRequest { - identifier?: string | null; - positionId?: string | null; -} - -export interface UpdateBotConfigRequest { - identifier: string; - config: TradingBotConfigRequest; - moneyManagementName?: string | null; - moneyManagement?: MoneyManagement | null; -} - -export interface TickerInfos { - ticker?: Ticker; - imageUrl?: string | null; -} - -export interface SpotlightOverview { - spotlights: Spotlight[]; - dateTime: Date; - identifier?: string; - scenarioCount?: number; -} - -export interface Spotlight { - scenario: Scenario; - tickerSignals: TickerSignal[]; -} - -export interface TickerSignal { - ticker: Ticker; - fiveMinutes: LightSignal[]; - fifteenMinutes: LightSignal[]; - oneHour: LightSignal[]; - fourHour: LightSignal[]; - oneDay: LightSignal[]; -} - -export interface CandlesWithIndicatorsResponse { - candles?: Candle[] | null; - indicatorsValues?: { [key in keyof typeof IndicatorType]?: IndicatorsResultBase; } | null; -} - -export interface GetCandlesWithIndicatorsRequest { - ticker?: Ticker; - startDate?: Date; - endDate?: Date; - timeframe?: Timeframe; - scenario?: ScenarioRequest | null; -} - -export interface StrategiesStatisticsViewModel { - totalStrategiesRunning?: number; - changeInLast24Hours?: number; -} - -export interface TopStrategiesViewModel { - topStrategies?: StrategyPerformance[] | null; -} - -export interface StrategyPerformance { - strategyName?: string | null; - pnL?: number; -} - -export interface UserStrategyDetailsViewModel { - name?: string | null; - state?: string | null; - pnL?: number; - roiPercentage?: number; - roiLast24H?: number; - runtime?: Date; - winRate?: number; - totalVolumeTraded?: number; - volumeLast24H?: number; - wins?: number; - losses?: number; - positions?: Position[] | null; - identifier?: string | null; - scenarioName?: string | null; -} - -export interface PlatformSummaryViewModel { - totalAgents?: number; - totalActiveStrategies?: number; - totalPlatformPnL?: number; - totalPlatformVolume?: number; - totalPlatformVolumeLast24h?: number; - timeFilter?: string | null; -} - -export interface AgentIndexViewModel { - agentSummaries?: AgentSummaryViewModel[] | null; - timeFilter?: string | null; -} - -export interface AgentSummaryViewModel { - agentName?: string | null; - totalPnL?: number; - pnLLast24h?: number; - totalROI?: number; - roiLast24h?: number; - wins?: number; - losses?: number; - averageWinRate?: number; - activeStrategiesCount?: number; - totalVolume?: number; - volumeLast24h?: number; -} - -export interface AgentBalanceHistory { - agentName?: string | null; - agentBalances?: AgentBalance[] | null; -} - -export interface AgentBalance { - agentName?: string | null; - totalValue?: number; - totalAccountUsdValue?: number; - botsAllocationUsdValue?: number; - pnL?: number; - time?: Date; -} - -export interface BestAgentsResponse { - agents?: AgentBalanceHistory[] | null; - totalCount?: number; - currentPage?: number; - pageSize?: number; - totalPages?: number; -} - -export interface ScenarioViewModel { - name: string; - indicators: IndicatorViewModel[]; - loopbackPeriod?: number | null; - userName: string; -} - -export interface IndicatorViewModel { - name: string; - type: IndicatorType; - signalType: SignalType; - minimumHistory: number; - period?: number | null; - fastPeriods?: number | null; - slowPeriods?: number | null; - signalPeriods?: number | null; - multiplier?: number | null; - smoothPeriods?: number | null; - stochPeriods?: number | null; - cyclePeriods?: number | null; - userName: string; -} - -export enum RiskLevel { - Low = "Low", - Medium = "Medium", - High = "High", - Adaptive = "Adaptive", -} - -export interface PrivyInitAddressResponse { - success?: boolean; - usdcHash?: string | null; - orderVaultHash?: string | null; - exchangeRouterHash?: string | null; - error?: string | null; -} - -export interface LoginRequest { - name: string; - address: string; - signature: string; - message: string; -} - -export interface Workflow { - name: string; - usage: WorkflowUsage; - flows: IFlow[]; - description: string; -} - -export enum WorkflowUsage { - Trading = "Trading", - Task = "Task", -} - -export interface IFlow { - id: string; - name: string; - type: FlowType; - description: string; - acceptedInputs: FlowOutput[]; - children?: IFlow[] | null; - parameters: FlowParameter[]; - parentId?: string; - output?: string | null; - outputTypes: FlowOutput[]; -} - -export enum FlowType { - RsiDivergence = "RsiDivergence", - FeedTicker = "FeedTicker", - OpenPosition = "OpenPosition", -} - -export enum FlowOutput { - Signal = "Signal", - Candles = "Candles", - Position = "Position", - MoneyManagement = "MoneyManagement", -} - -export interface FlowParameter { - value?: any | null; - name?: string | null; -} - -export interface SyntheticWorkflow { - name: string; - usage: WorkflowUsage; - description: string; - flows: SyntheticFlow[]; -} - -export interface SyntheticFlow { - id: string; - parentId?: string | null; - type: FlowType; - parameters: SyntheticFlowParameter[]; -} - -export interface SyntheticFlowParameter { - value: string; - name: string; -} - -export interface FileResponse { - data: Blob; - status: number; - fileName?: string; - headers?: { [name: string]: any }; -} - -export class ApiException extends Error { - override message: string; - status: number; - response: string; - headers: { [key: string]: any; }; - result: any; - - constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) { - super(); - - this.message = message; - this.status = status; - this.response = response; - this.headers = headers; - this.result = result; - } - - protected isApiException = true; - - static isApiException(obj: any): obj is ApiException { - return obj.isApiException === true; - } -} - -function throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any { - if (result !== null && result !== undefined) - throw result; - else - throw new ApiException(message, status, response, headers, null); -} \ No newline at end of file diff --git a/src/src/Managing.WebApp/src/generated/ManagingApiTypes.ts b/src/src/Managing.WebApp/src/generated/ManagingApiTypes.ts deleted file mode 100644 index 73bb5b7..0000000 --- a/src/src/Managing.WebApp/src/generated/ManagingApiTypes.ts +++ /dev/null @@ -1,1078 +0,0 @@ -//---------------------- -// -// Generated using the NSwag toolchain v14.3.0.0 (NJsonSchema v11.2.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org) -// -//---------------------- - -/* tslint:disable */ -/* eslint-disable */ -// ReSharper disable InconsistentNaming - - - -export interface Account { - name: string; - exchange: TradingExchanges; - type: AccountType; - key?: string | null; - secret?: string | null; - user?: User | null; - balances?: Balance[] | null; - isPrivyWallet?: boolean; -} - -export enum TradingExchanges { - Binance = "Binance", - Kraken = "Kraken", - Ftx = "Ftx", - Evm = "Evm", - GmxV2 = "GmxV2", -} - -export enum AccountType { - Cex = "Cex", - Trader = "Trader", - Watch = "Watch", - Auth = "Auth", - Privy = "Privy", -} - -export interface User { - name?: string | null; - accounts?: Account[] | null; - agentName?: string | null; - avatarUrl?: string | null; - telegramChannel?: string | null; -} - -export interface Balance { - tokenImage?: string | null; - tokenName?: string | null; - amount?: number; - price?: number; - value?: number; - tokenAdress?: string | null; - chain?: Chain | null; -} - -export interface Chain { - id?: string | null; - rpcUrl?: string | null; - name?: string | null; - chainId?: number; -} - -export interface GmxClaimableSummary { - claimableFundingFees?: FundingFeesData | null; - claimableUiFees?: UiFeesData | null; - rebateStats?: RebateStatsData | null; -} - -export interface FundingFeesData { - totalUsdc?: number; -} - -export interface UiFeesData { - totalUsdc?: number; -} - -export interface RebateStatsData { - totalRebateUsdc?: number; - discountUsdc?: number; - rebateFactor?: number; - discountFactor?: number; -} - -export interface SwapInfos { - success?: boolean; - hash?: string | null; - message?: string | null; - error?: string | null; - errorType?: string | null; - suggestion?: string | null; -} - -export interface SwapTokensRequest { - fromTicker: Ticker; - toTicker: Ticker; - amount: number; - orderType?: string | null; - triggerRatio?: number | null; - allowedSlippage?: number; -} - -export enum Ticker { - AAVE = "AAVE", - ADA = "ADA", - APE = "APE", - ALGO = "ALGO", - ARB = "ARB", - ATOM = "ATOM", - AVAX = "AVAX", - BNB = "BNB", - BTC = "BTC", - BAL = "BAL", - CHZ = "CHZ", - COMP = "COMP", - CRO = "CRO", - CRV = "CRV", - DOGE = "DOGE", - DOT = "DOT", - DYDX = "DYDX", - ENS = "ENS", - ETC = "ETC", - ETH = "ETH", - FIL = "FIL", - FLM = "FLM", - FTM = "FTM", - GALA = "GALA", - GMX = "GMX", - GRT = "GRT", - IMX = "IMX", - JASMY = "JASMY", - KSM = "KSM", - LDO = "LDO", - LINK = "LINK", - LRC = "LRC", - LTC = "LTC", - MANA = "MANA", - MATIC = "MATIC", - MKR = "MKR", - NEAR = "NEAR", - OP = "OP", - PEPE = "PEPE", - QTUM = "QTUM", - REN = "REN", - ROSE = "ROSE", - RSR = "RSR", - RUNE = "RUNE", - SAND = "SAND", - SOL = "SOL", - SRM = "SRM", - SUSHI = "SUSHI", - THETA = "THETA", - UNI = "UNI", - USDC = "USDC", - USDT = "USDT", - WIF = "WIF", - XMR = "XMR", - XRP = "XRP", - XTZ = "XTZ", - SHIB = "SHIB", - STX = "STX", - ORDI = "ORDI", - APT = "APT", - BOME = "BOME", - MEME = "MEME", - FLOKI = "FLOKI", - MEW = "MEW", - TAO = "TAO", - BONK = "BONK", - WLD = "WLD", - TBTC = "tBTC", - WBTC_b = "WBTC_b", - EIGEN = "EIGEN", - SUI = "SUI", - SEI = "SEI", - USDC_e = "USDC_e", - DAI = "DAI", - TIA = "TIA", - TRX = "TRX", - TON = "TON", - PENDLE = "PENDLE", - WstETH = "wstETH", - USDe = "USDe", - SATS = "SATS", - POL = "POL", - XLM = "XLM", - BCH = "BCH", - ICP = "ICP", - RENDER = "RENDER", - INJ = "INJ", - TRUMP = "TRUMP", - MELANIA = "MELANIA", - ENA = "ENA", - FARTCOIN = "FARTCOIN", - AI16Z = "AI16Z", - ANIME = "ANIME", - BERA = "BERA", - VIRTUAL = "VIRTUAL", - PENGU = "PENGU", - ONDO = "ONDO", - FET = "FET", - AIXBT = "AIXBT", - CAKE = "CAKE", - S = "S", - JUP = "JUP", - HYPE = "HYPE", - OM = "OM", - DOLO = "DOLO", - Unknown = "Unknown", -} - -export interface SendTokenRequest { - recipientAddress: string; - ticker: Ticker; - amount: number; - chainId?: number | null; -} - -export interface Backtest { - id: string; - finalPnl: number; - winRate: number; - growthPercentage: number; - hodlPercentage: number; - config: TradingBotConfig; - positions: Position[]; - signals: LightSignal[]; - candles: Candle[]; - startDate: Date; - endDate: Date; - statistics: PerformanceMetrics; - fees: number; - walletBalances: KeyValuePairOfDateTimeAndDecimal[]; - user: User; - indicatorsValues: { [key in keyof typeof IndicatorType]?: IndicatorsResultBase; }; - score: number; - requestId?: string; - metadata?: any | null; - scoreMessage?: string; -} - -export interface TradingBotConfig { - accountName: string; - moneyManagement: LightMoneyManagement; - ticker: Ticker; - timeframe: Timeframe; - isForWatchingOnly: boolean; - botTradingBalance: number; - isForBacktest: boolean; - cooldownPeriod: number; - maxLossStreak: number; - flipPosition: boolean; - name: string; - riskManagement?: RiskManagement | null; - scenario?: Scenario | null; - scenarioName?: string | null; - maxPositionTimeHours?: number | null; - closeEarlyWhenProfitable?: boolean; - flipOnlyWhenInProfit: boolean; - useSynthApi?: boolean; - useForPositionSizing?: boolean; - useForSignalFiltering?: boolean; - useForDynamicStopLoss?: boolean; -} - -export interface LightMoneyManagement { - name: string; - timeframe: Timeframe; - stopLoss: number; - takeProfit: number; - leverage: number; -} - -export enum Timeframe { - FiveMinutes = "FiveMinutes", - FifteenMinutes = "FifteenMinutes", - ThirtyMinutes = "ThirtyMinutes", - OneHour = "OneHour", - FourHour = "FourHour", - OneDay = "OneDay", - OneMinute = "OneMinute", -} - -export interface RiskManagement { - adverseProbabilityThreshold: number; - favorableProbabilityThreshold: number; - riskAversion: number; - kellyMinimumThreshold: number; - kellyMaximumCap: number; - maxLiquidationProbability: number; - signalValidationTimeHorizonHours: number; - positionMonitoringTimeHorizonHours: number; - positionWarningThreshold: number; - positionAutoCloseThreshold: number; - kellyFractionalMultiplier: number; - riskTolerance: RiskToleranceLevel; - useExpectedUtility: boolean; - useKellyCriterion: boolean; -} - -export enum RiskToleranceLevel { - Conservative = "Conservative", - Moderate = "Moderate", - Aggressive = "Aggressive", -} - -export interface Scenario { - name?: string | null; - indicators?: Indicator[] | null; - loopbackPeriod?: number | null; - user?: User | null; -} - -export interface Indicator { - name?: string | null; - type?: IndicatorType; - signalType?: SignalType; - minimumHistory?: number; - period?: number | null; - fastPeriods?: number | null; - slowPeriods?: number | null; - signalPeriods?: number | null; - multiplier?: number | null; - smoothPeriods?: number | null; - stochPeriods?: number | null; - cyclePeriods?: number | null; - user?: User | null; -} - -export enum IndicatorType { - RsiDivergence = "RsiDivergence", - RsiDivergenceConfirm = "RsiDivergenceConfirm", - MacdCross = "MacdCross", - EmaCross = "EmaCross", - ThreeWhiteSoldiers = "ThreeWhiteSoldiers", - SuperTrend = "SuperTrend", - ChandelierExit = "ChandelierExit", - EmaTrend = "EmaTrend", - Composite = "Composite", - StochRsiTrend = "StochRsiTrend", - Stc = "Stc", - StDev = "StDev", - LaggingStc = "LaggingStc", - SuperTrendCrossEma = "SuperTrendCrossEma", - DualEmaCross = "DualEmaCross", -} - -export enum SignalType { - Signal = "Signal", - Trend = "Trend", - Context = "Context", -} - -export interface Position { - accountName: string; - date: Date; - originDirection: TradeDirection; - ticker: Ticker; - moneyManagement: LightMoneyManagement; - Open: Trade; - StopLoss: Trade; - TakeProfit1: Trade; - TakeProfit2?: Trade | null; - ProfitAndLoss?: ProfitAndLoss | null; - status: PositionStatus; - signalIdentifier?: string | null; - identifier: string; - initiator: PositionInitiator; - user: User; -} - -export enum TradeDirection { - None = "None", - Short = "Short", - Long = "Long", -} - -export interface Trade { - fee: number; - date: Date; - direction: TradeDirection; - status: TradeStatus; - tradeType: TradeType; - ticker: Ticker; - quantity: number; - price: number; - leverage: number; - exchangeOrderId: string; - message: string; -} - -export enum TradeStatus { - PendingOpen = "PendingOpen", - Requested = "Requested", - Cancelled = "Cancelled", - Filled = "Filled", -} - -export enum TradeType { - Limit = "Limit", - Market = "Market", - StopMarket = "StopMarket", - StopLimit = "StopLimit", - StopLoss = "StopLoss", - TakeProfit = "TakeProfit", - StopLossProfit = "StopLossProfit", - StopLossProfitLimit = "StopLossProfitLimit", - StopLossLimit = "StopLossLimit", - TakeProfitLimit = "TakeProfitLimit", - TrailingStop = "TrailingStop", - TrailingStopLimit = "TrailingStopLimit", - StopLossAndLimit = "StopLossAndLimit", - SettlePosition = "SettlePosition", -} - -export interface ProfitAndLoss { - realized?: number; - net?: number; - averageOpenPrice?: number; -} - -export enum PositionStatus { - New = "New", - Canceled = "Canceled", - Rejected = "Rejected", - Updating = "Updating", - PartiallyFilled = "PartiallyFilled", - Filled = "Filled", - Flipped = "Flipped", - Finished = "Finished", -} - -export enum PositionInitiator { - PaperTrading = "PaperTrading", - Bot = "Bot", - User = "User", - CopyTrading = "CopyTrading", -} - -export interface ValueObject { -} - -export interface LightSignal extends ValueObject { - status: SignalStatus; - direction: TradeDirection; - confidence: Confidence; - timeframe: Timeframe; - date: Date; - candle: Candle; - identifier: string; - ticker: Ticker; - exchange: TradingExchanges; - indicatorType: IndicatorType; - signalType: SignalType; - indicatorName: string; -} - -export enum SignalStatus { - WaitingForPosition = "WaitingForPosition", - PositionOpen = "PositionOpen", - Expired = "Expired", -} - -export enum Confidence { - Low = "Low", - Medium = "Medium", - High = "High", - None = "None", -} - -export interface Candle { - exchange: TradingExchanges; - ticker: string; - openTime: Date; - date: Date; - open: number; - close: number; - high: number; - low: number; - timeframe: Timeframe; - volume?: number; -} - -export interface PerformanceMetrics { - count?: number; - sharpeRatio?: number; - maxDrawdown?: number; - maxDrawdownPc?: number; - maxDrawdownRecoveryTime?: string; - winningTrades?: number; - loosingTrades?: number; - totalPnL?: number; -} - -export interface KeyValuePairOfDateTimeAndDecimal { - key?: Date; - value?: number; -} - -export interface IndicatorsResultBase { - ema?: EmaResult[] | null; - fastEma?: EmaResult[] | null; - slowEma?: EmaResult[] | null; - macd?: MacdResult[] | null; - rsi?: RsiResult[] | null; - stoch?: StochResult[] | null; - stochRsi?: StochRsiResult[] | null; - bollingerBands?: BollingerBandsResult[] | null; - chandelierShort?: ChandelierResult[] | null; - stc?: StcResult[] | null; - stdDev?: StdDevResult[] | null; - superTrend?: SuperTrendResult[] | null; - chandelierLong?: ChandelierResult[] | null; -} - -export interface ResultBase { - date?: Date; -} - -export interface EmaResult extends ResultBase { - ema?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface MacdResult extends ResultBase { - macd?: number | null; - signal?: number | null; - histogram?: number | null; - fastEma?: number | null; - slowEma?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface RsiResult extends ResultBase { - rsi?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -/** Stochastic indicator results includes aliases for those who prefer the simpler K,D,J outputs. See documentation for more information. */ -export interface StochResult extends ResultBase { - oscillator?: number | null; - signal?: number | null; - percentJ?: number | null; - k?: number | null; - d?: number | null; - j?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface StochRsiResult extends ResultBase { - stochRsi?: number | null; - signal?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface BollingerBandsResult extends ResultBase { - sma?: number | null; - upperBand?: number | null; - lowerBand?: number | null; - percentB?: number | null; - zScore?: number | null; - width?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface ChandelierResult extends ResultBase { - chandelierExit?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface StcResult extends ResultBase { - stc?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface StdDevResult extends ResultBase { - stdDev?: number | null; - mean?: number | null; - zScore?: number | null; - stdDevSma?: number | null; - "skender.Stock.Indicators.IReusableResult.Value"?: number | null; -} - -export interface SuperTrendResult extends ResultBase { - superTrend?: number | null; - upperBand?: number | null; - lowerBand?: number | null; -} - -export interface DeleteBacktestsRequest { - backtestIds: string[]; -} - -export interface PaginatedBacktestsResponse { - backtests?: LightBacktestResponse[] | null; - totalCount?: number; - currentPage?: number; - pageSize?: number; - totalPages?: number; - hasNextPage?: boolean; - hasPreviousPage?: boolean; -} - -export interface LightBacktestResponse { - id: string; - config: TradingBotConfig; - finalPnl: number; - winRate: number; - growthPercentage: number; - hodlPercentage: number; - startDate: Date; - endDate: Date; - maxDrawdown: number; - fees: number; - sharpeRatio: number; - score: number; - scoreMessage: string; -} - -export interface RunBacktestRequest { - config?: TradingBotConfigRequest | null; - startDate?: Date; - endDate?: Date; - save?: boolean; - withCandles?: boolean; -} - -export interface TradingBotConfigRequest { - accountName: string; - ticker: Ticker; - timeframe: Timeframe; - isForWatchingOnly: boolean; - botTradingBalance: number; - name: string; - flipPosition: boolean; - cooldownPeriod: number; - maxLossStreak: number; - scenario?: ScenarioRequest | null; - scenarioName?: string | null; - moneyManagementName?: string | null; - moneyManagement?: MoneyManagementRequest | null; - maxPositionTimeHours?: number | null; - closeEarlyWhenProfitable?: boolean; - flipOnlyWhenInProfit?: boolean; - useSynthApi?: boolean; - useForPositionSizing?: boolean; - useForSignalFiltering?: boolean; - useForDynamicStopLoss?: boolean; -} - -export interface ScenarioRequest { - name: string; - indicators: IndicatorRequest[]; - loopbackPeriod?: number | null; -} - -export interface IndicatorRequest { - name: string; - type: IndicatorType; - signalType: SignalType; - minimumHistory?: number; - period?: number | null; - fastPeriods?: number | null; - slowPeriods?: number | null; - signalPeriods?: number | null; - multiplier?: number | null; - smoothPeriods?: number | null; - stochPeriods?: number | null; - cyclePeriods?: number | null; -} - -export interface MoneyManagementRequest { - name: string; - timeframe: Timeframe; - stopLoss: number; - takeProfit: number; - leverage: number; -} - -export interface BundleBacktestRequest { - requestId: string; - user: User; - createdAt: Date; - completedAt?: Date | null; - status: BundleBacktestRequestStatus; - name: string; - backtestRequestsJson: string; - results?: string[] | null; - totalBacktests: number; - completedBacktests: number; - failedBacktests: number; - progressPercentage?: number; - errorMessage?: string | null; - progressInfo?: string | null; - currentBacktest?: string | null; - estimatedTimeRemainingSeconds?: number | null; -} - -export enum BundleBacktestRequestStatus { - Pending = "Pending", - Running = "Running", - Completed = "Completed", - Failed = "Failed", - Cancelled = "Cancelled", -} - -export interface RunBundleBacktestRequest { - name: string; - requests: RunBacktestRequest[]; -} - -export interface GeneticRequest { - requestId: string; - user: User; - createdAt: Date; - completedAt?: Date | null; - status: GeneticRequestStatus; - ticker: Ticker; - timeframe: Timeframe; - startDate: Date; - endDate: Date; - balance: number; - populationSize: number; - generations: number; - mutationRate: number; - selectionMethod: GeneticSelectionMethod; - crossoverMethod: GeneticCrossoverMethod; - mutationMethod: GeneticMutationMethod; - elitismPercentage: number; - maxTakeProfit: number; - eligibleIndicators: IndicatorType[]; - results?: Backtest[] | null; - bestFitness?: number | null; - bestIndividual?: string | null; - errorMessage?: string | null; - progressInfo?: string | null; - bestChromosome?: string | null; - currentGeneration?: number; - bestFitnessSoFar?: number | null; -} - -export enum GeneticRequestStatus { - Pending = "Pending", - Running = "Running", - Completed = "Completed", - Failed = "Failed", - Cancelled = "Cancelled", -} - -export enum GeneticSelectionMethod { - Elite = "Elite", - Roulette = "Roulette", - StochasticUniversalSampling = "StochasticUniversalSampling", - Tournament = "Tournament", - Truncation = "Truncation", -} - -export enum GeneticCrossoverMethod { - AlternatingPosition = "AlternatingPosition", - CutAndSplice = "CutAndSplice", - Cycle = "Cycle", - OnePoint = "OnePoint", - OrderBased = "OrderBased", - Ordered = "Ordered", - PartiallyMapped = "PartiallyMapped", - PositionBased = "PositionBased", - ThreeParent = "ThreeParent", - TwoPoint = "TwoPoint", - Uniform = "Uniform", - VotingRecombination = "VotingRecombination", -} - -export enum GeneticMutationMethod { - Displacement = "Displacement", - FlipBit = "FlipBit", - Insertion = "Insertion", - PartialShuffle = "PartialShuffle", - ReverseSequence = "ReverseSequence", - Twors = "Twors", - Uniform = "Uniform", -} - -export interface RunGeneticRequest { - ticker?: Ticker; - timeframe?: Timeframe; - startDate?: Date; - endDate?: Date; - balance?: number; - populationSize?: number; - generations?: number; - mutationRate?: number; - selectionMethod?: GeneticSelectionMethod; - crossoverMethod?: GeneticCrossoverMethod; - mutationMethod?: GeneticMutationMethod; - elitismPercentage?: number; - maxTakeProfit?: number; - eligibleIndicators?: IndicatorType[] | null; -} - -export interface MoneyManagement extends LightMoneyManagement { - user?: User | null; -} - -export interface StartBotRequest { - config?: TradingBotConfigRequest | null; -} - -export enum BotType { - SimpleBot = "SimpleBot", - ScalpingBot = "ScalpingBot", - FlippingBot = "FlippingBot", -} - -export interface TradingBotResponse { - status: string; - signals: LightSignal[]; - positions: Position[]; - candles: Candle[]; - winRate: number; - profitAndLoss: number; - identifier: string; - agentName: string; - config: TradingBotConfig; - createDate: Date; - startupTime: Date; -} - -export interface OpenPositionManuallyRequest { - identifier?: string | null; - direction?: TradeDirection; -} - -export interface ClosePositionRequest { - identifier?: string | null; - positionId?: string | null; -} - -export interface UpdateBotConfigRequest { - identifier: string; - config: TradingBotConfigRequest; - moneyManagementName?: string | null; - moneyManagement?: MoneyManagement | null; -} - -export interface TickerInfos { - ticker?: Ticker; - imageUrl?: string | null; -} - -export interface SpotlightOverview { - spotlights: Spotlight[]; - dateTime: Date; - identifier?: string; - scenarioCount?: number; -} - -export interface Spotlight { - scenario: Scenario; - tickerSignals: TickerSignal[]; -} - -export interface TickerSignal { - ticker: Ticker; - fiveMinutes: LightSignal[]; - fifteenMinutes: LightSignal[]; - oneHour: LightSignal[]; - fourHour: LightSignal[]; - oneDay: LightSignal[]; -} - -export interface CandlesWithIndicatorsResponse { - candles?: Candle[] | null; - indicatorsValues?: { [key in keyof typeof IndicatorType]?: IndicatorsResultBase; } | null; -} - -export interface GetCandlesWithIndicatorsRequest { - ticker?: Ticker; - startDate?: Date; - endDate?: Date; - timeframe?: Timeframe; - scenario?: ScenarioRequest | null; -} - -export interface StrategiesStatisticsViewModel { - totalStrategiesRunning?: number; - changeInLast24Hours?: number; -} - -export interface TopStrategiesViewModel { - topStrategies?: StrategyPerformance[] | null; -} - -export interface StrategyPerformance { - strategyName?: string | null; - pnL?: number; -} - -export interface UserStrategyDetailsViewModel { - name?: string | null; - state?: string | null; - pnL?: number; - roiPercentage?: number; - roiLast24H?: number; - runtime?: Date; - winRate?: number; - totalVolumeTraded?: number; - volumeLast24H?: number; - wins?: number; - losses?: number; - positions?: Position[] | null; - identifier?: string | null; - scenarioName?: string | null; -} - -export interface PlatformSummaryViewModel { - totalAgents?: number; - totalActiveStrategies?: number; - totalPlatformPnL?: number; - totalPlatformVolume?: number; - totalPlatformVolumeLast24h?: number; - timeFilter?: string | null; -} - -export interface AgentIndexViewModel { - agentSummaries?: AgentSummaryViewModel[] | null; - timeFilter?: string | null; -} - -export interface AgentSummaryViewModel { - agentName?: string | null; - totalPnL?: number; - pnLLast24h?: number; - totalROI?: number; - roiLast24h?: number; - wins?: number; - losses?: number; - averageWinRate?: number; - activeStrategiesCount?: number; - totalVolume?: number; - volumeLast24h?: number; -} - -export interface AgentBalanceHistory { - agentName?: string | null; - agentBalances?: AgentBalance[] | null; -} - -export interface AgentBalance { - agentName?: string | null; - totalValue?: number; - totalAccountUsdValue?: number; - botsAllocationUsdValue?: number; - pnL?: number; - time?: Date; -} - -export interface BestAgentsResponse { - agents?: AgentBalanceHistory[] | null; - totalCount?: number; - currentPage?: number; - pageSize?: number; - totalPages?: number; -} - -export interface ScenarioViewModel { - name: string; - indicators: IndicatorViewModel[]; - loopbackPeriod?: number | null; - userName: string; -} - -export interface IndicatorViewModel { - name: string; - type: IndicatorType; - signalType: SignalType; - minimumHistory: number; - period?: number | null; - fastPeriods?: number | null; - slowPeriods?: number | null; - signalPeriods?: number | null; - multiplier?: number | null; - smoothPeriods?: number | null; - stochPeriods?: number | null; - cyclePeriods?: number | null; - userName: string; -} - -export enum RiskLevel { - Low = "Low", - Medium = "Medium", - High = "High", - Adaptive = "Adaptive", -} - -export interface PrivyInitAddressResponse { - success?: boolean; - usdcHash?: string | null; - orderVaultHash?: string | null; - exchangeRouterHash?: string | null; - error?: string | null; -} - -export interface LoginRequest { - name: string; - address: string; - signature: string; - message: string; -} - -export interface Workflow { - name: string; - usage: WorkflowUsage; - flows: IFlow[]; - description: string; -} - -export enum WorkflowUsage { - Trading = "Trading", - Task = "Task", -} - -export interface IFlow { - id: string; - name: string; - type: FlowType; - description: string; - acceptedInputs: FlowOutput[]; - children?: IFlow[] | null; - parameters: FlowParameter[]; - parentId?: string; - output?: string | null; - outputTypes: FlowOutput[]; -} - -export enum FlowType { - RsiDivergence = "RsiDivergence", - FeedTicker = "FeedTicker", - OpenPosition = "OpenPosition", -} - -export enum FlowOutput { - Signal = "Signal", - Candles = "Candles", - Position = "Position", - MoneyManagement = "MoneyManagement", -} - -export interface FlowParameter { - value?: any | null; - name?: string | null; -} - -export interface SyntheticWorkflow { - name: string; - usage: WorkflowUsage; - description: string; - flows: SyntheticFlow[]; -} - -export interface SyntheticFlow { - id: string; - parentId?: string | null; - type: FlowType; - parameters: SyntheticFlowParameter[]; -} - -export interface SyntheticFlowParameter { - value: string; - name: string; -} - -export interface FileResponse { - data: Blob; - status: number; - fileName?: string; - headers?: { [name: string]: any }; -} \ No newline at end of file diff --git a/test/plugins/token-approval.test.ts b/test/plugins/token-approval.test.ts deleted file mode 100644 index e69de29..0000000