Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .cursor/worktrees.json

This file was deleted.

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@ dist-ssr

# opensrc - source code for packages
opensrc/

.turbo
*.tsbuildinfo
1 change: 1 addition & 0 deletions .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pnpm commitlint --edit ${1}
3 changes: 2 additions & 1 deletion biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
"!**/.vscode",
"!**/routeTree.gen.ts",
"!**/client-factory.ts",
"!**/api-schemas.ts"
"!**/api-schemas.ts",
"!**/opensrc"
]
},
"formatter": {
Expand Down
3 changes: 3 additions & 0 deletions commitlint.config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
extends: ["@commitlint/config-conventional"],
};
21 changes: 0 additions & 21 deletions components.json

This file was deleted.

2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.tsx"></script>
<script type="module" src="/src/example/main.tsx"></script>
</body>
</html>
88 changes: 23 additions & 65 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,71 +1,29 @@
{
"name": "perps",
"private": true,
"type": "module",
"name": "@yieldxyz/perps",
"keywords": [
"perps",
"yieldxyz"
],
"scripts": {
"dev": "vite --port 3000",
"build": "vite build && tsc",
"preview": "vite preview",
"test": "vitest run",
"lint": "biome check . && tsc",
"format": "biome format --write .",
"generate-client-factory": "tsx --env-file .env scripts/generate-client-factory.ts",
"generate-routes": "tsr generate",
"generate-tradingview-symbols": "tsx --env-file .env scripts/generate-tradingview-symbols/index.ts"
},
"dependencies": {
"@base-ui/react": "^1.1.0",
"@effect-atom/atom-react": "^0.4.6",
"@effect/experimental": "^0.58.0",
"@effect/platform": "^0.94.2",
"@effect/platform-node": "^0.104.1",
"@ledgerhq/wallet-api-client": "^1.12.6",
"@lucas-barake/effect-form-react": "^0.14.0",
"@reown/appkit": "^1.8.17",
"@reown/appkit-adapter-wagmi": "^1.8.17",
"@stakekit/common": "^0.0.61",
"@tailwindcss/vite": "^4.0.6",
"@tanstack/react-devtools": "^0.9.2",
"@tanstack/react-query": "^5.90.20",
"@tanstack/react-router": "^1.157.8",
"@tanstack/react-router-devtools": "^1.157.8",
"@tanstack/react-virtual": "^3.13.18",
"@tanstack/router-plugin": "^1.157.8",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"effect": "^3.19.15",
"lucide-react": "^0.563.0",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"sonner": "^2.0.7",
"tailwind-merge": "^3.0.2",
"tailwindcss": "^4.0.6",
"tw-animate-css": "^1.3.6",
"viem": "^2.45.0",
"wagmi": "^3.4.1"
"dev": "turbo dev --filter=@yieldxyz/perps-common --filter=@yieldxyz/perps-widget --filter=@yieldxyz/perps-dashboard",
"dev:widget": "turbo dev --filter=@yieldxyz/perps-common --filter=@yieldxyz/perps-widget",
"dev:dashboard": "turbo dev --filter=@yieldxyz/perps-common --filter=@yieldxyz/perps-dashboard",

"build:widget": "turbo build --filter=@yieldxyz/perps-widget",
"build:dashboard": "turbo build --filter=@yieldxyz/perps-dashboard",

"build": "turbo build",
"test": "turbo test",
"lint": "turbo lint",
"format": "turbo format",
"prepare": "husky"
},
"devDependencies": {
"@biomejs/biome": "2.3.12",
"@effect/language-service": "^0.72.0",
"@tanstack/devtools-vite": "^0.4.1",
"@tanstack/router-cli": "^1.157.15",
"@testing-library/dom": "^10.4.0",
"@testing-library/react": "^16.3.2",
"@tim-smart/openapi-gen": "^0.4.13",
"@types/node": "^25.0.10",
"@types/react": "^19.2.9",
"@types/react-dom": "^19.2.0",
"@vite-pwa/assets-generator": "^1.0.2",
"@vitejs/plugin-react": "^5.0.4",
"@vitest/browser-playwright": "^4.0.18",
"babel-plugin-react-compiler": "^1.0.0",
"jsdom": "^27.0.0",
"openapi-filter": "^3.2.3",
"tsx": "^4.21.0",
"typescript": "^5.7.2",
"vite": "^7.3.1",
"vite-plugin-node-polyfills": "^0.25.0",
"vitest": "^4.0.18",
"vitest-browser-react": "^2.0.4"
"turbo": "catalog:",
"@biomejs/biome": "catalog:",
"@effect/language-service": "catalog:",
"@commitlint/cli": "catalog:",
"@commitlint/config-conventional": "catalog:",
"husky": "catalog:"
}
}
108 changes: 108 additions & 0 deletions packages/common/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
{
"name": "@yieldxyz/perps-common",
"version": "0.0.1",
"private": true,
"type": "module",
"scripts": {
"dev": "pnpm run watch",
"watch": "tsc -b --watch",
"build": "rm -rf dist && tsc -b && pnpm run copy-assets",
"test": "vitest run",
"copy-assets": "cp -r src/assets dist/src && cp -r src/styles dist/src/styles",
"lint": "biome check . && tsc -b",
"format": "biome format --write .",
"generate-client-factory": "tsx --env-file .env scripts/generate-client-factory.ts",
"generate-tradingview-symbols": "tsx --env-file .env scripts/generate-tradingview-symbols/index.ts"
},
"exports": {
"./vite.config": {
"default": "./dist/src/vite.config.js"
},
"./styles": {
"default": "./dist/src/styles/index.css"
},
"./assets/*": {
"default": "./dist/src/assets/*"
},
"./services": {
"types": "./dist/src/services/index.d.ts",
"default": "./dist/src/services/index.js"
},
"./domain": {
"types": "./dist/src/domain/index.d.ts",
"default": "./dist/src/domain/index.js"
},
"./components": {
"types": "./dist/src/components/index.d.ts",
"default": "./dist/src/components/index.js"
},
"./context": {
"types": "./dist/src/context/index.d.ts",
"default": "./dist/src/context/index.js"
},
"./atoms": {
"types": "./dist/src/atoms/index.d.ts",
"default": "./dist/src/atoms/index.js"
},
"./hooks": {
"types": "./dist/src/hooks/index.d.ts",
"default": "./dist/src/hooks/index.js"
},
"./lib": {
"types": "./dist/src/lib/index.d.ts",
"default": "./dist/src/lib/index.js"
}
},
"dependencies": {
"@base-ui/react": "catalog:",
"@effect-atom/atom-react": "catalog:",
"@effect/experimental": "^0.58.0",
"@effect/platform": "catalog:",
"@effect/platform-node": "catalog:",
"@ledgerhq/wallet-api-client": "catalog:",
"@lucas-barake/effect-form-react": "catalog:",
"@reown/appkit": "catalog:",
"@reown/appkit-adapter-wagmi": "catalog:",
"@stakekit/common": "catalog:",
"@tailwindcss/vite": "catalog:",
"@tanstack/react-devtools": "catalog:",
"@tanstack/react-query": "catalog:",
"@tanstack/react-router": "catalog:",
"@tanstack/react-router-devtools": "catalog:",
"@tanstack/react-virtual": "catalog:",
"class-variance-authority": "catalog:",
"clsx": "catalog:",
"effect": "catalog:",
"lucide-react": "catalog:",
"react": "catalog:",
"react-dom": "catalog:",
"sonner": "catalog:",
"tailwind-merge": "catalog:",
"tailwindcss": "catalog:",
"tw-animate-css": "catalog:",
"viem": "catalog:",
"wagmi": "catalog:"
},
"devDependencies": {
"@tanstack/devtools-vite": "catalog:",
"@tanstack/router-cli": "catalog:",
"@testing-library/dom": "catalog:",
"@testing-library/react": "catalog:",
"@tim-smart/openapi-gen": "catalog:",
"@types/node": "catalog:",
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
"@vite-pwa/assets-generator": "catalog:",
"@vitejs/plugin-react": "catalog:",
"@vitest/browser-playwright": "catalog:",
"babel-plugin-react-compiler": "catalog:",
"jsdom": "catalog:",
"openapi-filter": "catalog:",
"tsx": "catalog:",
"typescript": "catalog:",
"vite": "catalog:",
"vite-plugin-node-polyfills": "catalog:",
"vitest": "catalog:",
"vitest-browser-react": "catalog:"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const fetchOpenApiSpecs = Effect.gen(function* () {
const client = yield* HttpClient.HttpClient;
const fs = yield* FileSystem.FileSystem;

const perpsDocsUrl = yield* Config.string("VITE_PERPS_DOCS_URL");
const perpsDocsUrl = yield* Config.string("PERPS_DOCS_URL");
const perpsJsonPath = yield* perpsOpenApiJsonPath;

yield* client.get(perpsDocsUrl).pipe(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import {
normalizeSymbol,
ProvidersResponse,
TradingViewSearchResponse,
} from "scripts/generate-tradingview-symbols/utils";
} from "./utils";

// -----------------------------------------------------------------------------
// HttpClient Services
Expand All @@ -29,8 +29,8 @@ class PerpsClient extends Effect.Service<PerpsClient>()(
{
dependencies: [FetchHttpClient.layer],
effect: Effect.gen(function* () {
const baseUrl = yield* Config.string("VITE_PERPS_BASE_URL");
const apiKey = yield* Config.string("VITE_PERPS_API_KEY");
const baseUrl = yield* Config.string("PERPS_BASE_URL");
const apiKey = yield* Config.string("PERPS_API_KEY");
const client = yield* HttpClient.HttpClient;

return client.pipe(
Expand Down Expand Up @@ -247,7 +247,6 @@ const program = Effect.gen(function* () {
const path = join(
dirname(fileURLToPath(import.meta.url)),
"..",
"..",
"src",
"assets",
"tradingview-symbols.json",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@
{
"status": "match",
"perpsSymbol": "SNX",
"tradingViewSymbol": "SNXUSDC",
"tradingViewSymbol": "SNXUSD",
"providerId": "BINANCE"
},
{
Expand Down Expand Up @@ -417,7 +417,7 @@
"status": "match",
"perpsSymbol": "MAV",
"tradingViewSymbol": "MAVUSD",
"providerId": "BINANCE"
"providerId": "TVC"
},
{
"status": "match",
Expand Down Expand Up @@ -825,7 +825,7 @@
"status": "match",
"perpsSymbol": "VINE",
"tradingViewSymbol": "VINEUSD",
"providerId": "KRAKEN"
"providerId": "CRYPTOCOM"
},
{
"status": "match",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { Reactivity } from "@effect/experimental/Reactivity";
import { Atom } from "@effect-atom/atom-react";
import { Atom, type Result } from "@effect-atom/atom-react";
import { Effect, Stream } from "effect";
import { portfolioReactivityKeysArray } from "@/atoms/portfolio-atoms";
import type { WalletConnected } from "@/domain/wallet";
import type { ActionDto } from "@/services/api-client/api-schemas";
import { runtimeAtom } from "@/services/runtime";
import type { SignTransactionsState, WalletConnected } from "../domain/wallet";
import type { ActionDto } from "../services/api-client/api-schemas";
import { runtimeAtom } from "../services/runtime";
import { portfolioReactivityKeysArray } from "./portfolio-atoms";

export const actionAtom = Atom.writable<ActionDto | null, ActionDto>(
export const actionAtom = Atom.writable<ActionDto | null, ActionDto | null>(
() => null,
(ctx, value) => ctx.setSelf(value),
);
Expand All @@ -21,7 +21,21 @@ const getActionAtom = Atom.make(
}),
);

export const signActionAtoms = Atom.family(
type SignActionAtoms = (
arg: (action: ActionDto) => Effect.Effect<
{
stream: Stream.Stream<SignTransactionsState, never, never>;
retry: Effect.Effect<void, never, never>;
},
never,
never
>,
) => {
machineStreamAtom: Atom.Atom<Result.Result<SignTransactionsState, never>>;
retryMachineAtom: Atom.AtomResultFn<void, void, never>;
};

export const signActionAtoms: SignActionAtoms = Atom.family(
(signTransactions: WalletConnected["signTransactions"]) => {
const machineAtom = runtimeAtom.atom((ctx) =>
ctx
Expand Down
Loading