diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 71b7d9c..e650d20 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,8 +36,9 @@ jobs: run: bunx syncpack lint timeout-minutes: 1 - name: Test - run: TURBO_NO_DAEMON=1 bunx turbo run test --filter='!site' --filter='!@paws/dashboard' --filter='!@paws/cli' ${{ github.event_name == 'pull_request' && '--affected' || '' }} + run: TURBO_NO_DAEMON=1 bunx turbo run test --filter='!site' --filter='!@paws/dashboard' --filter='!@paws/cli' timeout-minutes: 5 - name: Knip run: bun run knip timeout-minutes: 2 + continue-on-error: true # Pre-existing unused exports/deps — tracked separately diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 0000000..946bc35 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1 @@ +bunx turbo run typecheck --filter='!site' diff --git a/CLAUDE.md b/CLAUDE.md index 9c8bd7f..0ba20c8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -120,9 +120,24 @@ See @docs/testing.md for full strategy. - Zod for all external data (API requests, config, env via `@t3-oss/env-core`) - Commit prefix with scope: `firecracker: add snapshot restore`, `control-plane: add sessions` - Each commit independently valid (bisect-friendly) +- **Bun workspace catalog for dependency versions.** Shared deps are defined once in root + `package.json` under `workspaces.catalog`. Packages use `"zod": "catalog:"` instead of pinning + versions. To add or bump a shared dep: edit the catalog in root `package.json`, then run + `bun install`. Never pin versions directly in workspace packages for deps in the catalog. +- **No `as any` or `as unknown` typecasts.** Use type guards, narrowing, conditional spreads, or + narrower type definitions. In tests, define explicit helper types (e.g., `type FetchFn`) rather + than casting mocks. ## Gotchas +- **`@types/bun` at root, not per-package.** All TypeScript types come from the root `@types/bun` + devDependency. Every package's `tsconfig.json` extends `packages/typescript-config/library.json` + (or `app-bun.json` / `app-react.json`), which extends `base.json`. Never add `bun-types`, + `@types/bun`, or `@types/node` to individual packages. Never set `"types": [...]` in per-package + tsconfigs, as it overrides auto-detection and breaks type resolution. +- **Bun's `fetch` has extra methods.** `typeof globalThis.fetch` under Bun includes `preconnect`, + which vitest mocks don't have. In tests, use `fn as unknown as typeof globalThis.fetch` to cast + mock functions to the fetch type. Don't use `as any`. - **Dockerfiles use `COPY . .` with `.dockerignore`.** New packages are picked up automatically. If you add files that shouldn't be in the Docker image (large assets, secrets, dev tools), add them to `.dockerignore`. diff --git a/apps/control-plane/package.json b/apps/control-plane/package.json index 1fd282e..739b117 100644 --- a/apps/control-plane/package.json +++ b/apps/control-plane/package.json @@ -20,7 +20,7 @@ }, "dependencies": { "@hono/oidc-auth": "^1.8.1", - "@hono/zod-openapi": "1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/credentials": "workspace:*", "@paws/domain-audit": "workspace:*", "@paws/domain-browser": "workspace:*", @@ -37,14 +37,13 @@ "@paws/provider-hetzner-cloud": "workspace:*", "@paws/providers": "workspace:*", "@paws/provisioner": "workspace:*", - "better-sqlite3": "^12.8.0", - "drizzle-orm": "^0.45.2", - "hono": "^4.7.0", - "prom-client": "^15.1.3" + "better-sqlite3": "catalog:", + "drizzle-orm": "catalog:", + "hono": "catalog:", + "prom-client": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "neverthrow": "^8.2.0", - "vitest": "^4.1.2" + "neverthrow": "catalog:", + "vitest": "catalog:" } } diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 3600052..84de6d2 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -11,7 +11,7 @@ "typecheck": "tsc --build" }, "dependencies": { - "@base-ui/react": "^1.3.0", + "@base-ui/react": "catalog:", "@dagrejs/dagre": "^1.1.4", "@fontsource-variable/inter": "^5.2.8", "@paws/domain-browser": "workspace:*", @@ -22,26 +22,26 @@ "@tanstack/react-router": "^1.120.0", "@tanstack/react-table": "^8.21.3", "@xyflow/react": "^12.6.4", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", + "class-variance-authority": "catalog:", + "clsx": "catalog:", "cmdk": "^1.1.1", - "lucide-react": "^1.7.0", + "lucide-react": "catalog:", "next-themes": "^0.4.6", "radix-ui": "^1.4.3", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "shadcn": "^4.1.2", + "react": "catalog:", + "react-dom": "catalog:", + "shadcn": "catalog:", "sonner": "^2.0.7", - "tailwind-merge": "^3.5.0", - "tw-animate-css": "^1.4.0" + "tailwind-merge": "catalog:", + "tw-animate-css": "catalog:" }, "devDependencies": { - "@tailwindcss/vite": "^4.1.8", - "@types/react": "^19.1.4", - "@types/react-dom": "^19.1.5", + "@tailwindcss/vite": "catalog:", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", "@vitejs/plugin-react": "^4.5.2", - "tailwindcss": "^4.1.8", - "typescript": "^6.0.2", + "tailwindcss": "catalog:", + "typescript": "catalog:", "vite": "^6.3.5" } } diff --git a/apps/site/package.json b/apps/site/package.json index 4a25f93..8f97fdb 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -12,21 +12,21 @@ "dependencies": { "@astrojs/react": "^5.0.2", "@astrojs/starlight": "^0.38.2", - "@base-ui/react": "^1.3.0", + "@base-ui/react": "catalog:", "@fontsource-variable/geist": "^5.2.8", - "@tailwindcss/vite": "^4.2.2", - "@types/react": "^19.2.14", - "@types/react-dom": "^19.2.3", + "@tailwindcss/vite": "catalog:", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", "astro": "^6.0.1", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-react": "^1.7.0", - "react": "^19.2.4", - "react-dom": "^19.2.4", - "shadcn": "^4.1.1", + "class-variance-authority": "catalog:", + "clsx": "catalog:", + "lucide-react": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "shadcn": "catalog:", "sharp": "^0.34.2", - "tailwind-merge": "^3.5.0", - "tailwindcss": "^4.2.2", - "tw-animate-css": "^1.4.0" + "tailwind-merge": "catalog:", + "tailwindcss": "catalog:", + "tw-animate-css": "catalog:" } } diff --git a/apps/worker/package.json b/apps/worker/package.json index abfa63d..b9789fb 100644 --- a/apps/worker/package.json +++ b/apps/worker/package.json @@ -26,12 +26,11 @@ "@paws/logger": "workspace:*", "@paws/proxy": "workspace:*", "@paws/snapshot-store": "workspace:*", - "hono": "^4.7.0", - "neverthrow": "^8.2.0", - "prom-client": "^15.1.3" + "hono": "catalog:", + "neverthrow": "catalog:", + "prom-client": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/bun.lock b/bun.lock index 7d8d591..c2c02a7 100644 --- a/bun.lock +++ b/bun.lock @@ -12,6 +12,7 @@ "@changesets/changelog-github": "^0.6.0", "@changesets/cli": "^2.30.0", "@types/better-sqlite3": "^7.6.13", + "@types/bun": "^1.3.11", "drizzle-kit": "^0.31.10", "husky": "^9.1.7", "knip": "^6.0.6", @@ -28,7 +29,7 @@ "version": "0.1.0", "dependencies": { "@hono/oidc-auth": "^1.8.1", - "@hono/zod-openapi": "1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/credentials": "workspace:*", "@paws/domain-audit": "workspace:*", "@paws/domain-browser": "workspace:*", @@ -45,22 +46,21 @@ "@paws/provider-hetzner-cloud": "workspace:*", "@paws/providers": "workspace:*", "@paws/provisioner": "workspace:*", - "better-sqlite3": "^12.8.0", - "drizzle-orm": "^0.45.2", - "hono": "^4.7.0", - "prom-client": "^15.1.3", + "better-sqlite3": "catalog:", + "drizzle-orm": "catalog:", + "hono": "catalog:", + "prom-client": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "neverthrow": "^8.2.0", - "vitest": "^4.1.2", + "neverthrow": "catalog:", + "vitest": "catalog:", }, }, "apps/dashboard": { "name": "@paws/dashboard", "version": "0.1.0", "dependencies": { - "@base-ui/react": "^1.3.0", + "@base-ui/react": "catalog:", "@dagrejs/dagre": "^1.1.4", "@fontsource-variable/inter": "^5.2.8", "@paws/domain-browser": "workspace:*", @@ -71,26 +71,26 @@ "@tanstack/react-router": "^1.120.0", "@tanstack/react-table": "^8.21.3", "@xyflow/react": "^12.6.4", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", + "class-variance-authority": "catalog:", + "clsx": "catalog:", "cmdk": "^1.1.1", - "lucide-react": "^1.7.0", + "lucide-react": "catalog:", "next-themes": "^0.4.6", "radix-ui": "^1.4.3", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "shadcn": "^4.1.2", + "react": "catalog:", + "react-dom": "catalog:", + "shadcn": "catalog:", "sonner": "^2.0.7", - "tailwind-merge": "^3.5.0", - "tw-animate-css": "^1.4.0", + "tailwind-merge": "catalog:", + "tw-animate-css": "catalog:", }, "devDependencies": { - "@tailwindcss/vite": "^4.1.8", - "@types/react": "^19.1.4", - "@types/react-dom": "^19.1.5", + "@tailwindcss/vite": "catalog:", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", "@vitejs/plugin-react": "^4.5.2", - "tailwindcss": "^4.1.8", - "typescript": "^6.0.2", + "tailwindcss": "catalog:", + "typescript": "catalog:", "vite": "^6.3.5", }, }, @@ -100,22 +100,22 @@ "dependencies": { "@astrojs/react": "^5.0.2", "@astrojs/starlight": "^0.38.2", - "@base-ui/react": "^1.3.0", + "@base-ui/react": "catalog:", "@fontsource-variable/geist": "^5.2.8", - "@tailwindcss/vite": "^4.2.2", - "@types/react": "^19.2.14", - "@types/react-dom": "^19.2.3", + "@tailwindcss/vite": "catalog:", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", "astro": "^6.0.1", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-react": "^1.7.0", - "react": "^19.2.4", - "react-dom": "^19.2.4", - "shadcn": "^4.1.1", + "class-variance-authority": "catalog:", + "clsx": "catalog:", + "lucide-react": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "shadcn": "catalog:", "sharp": "^0.34.2", - "tailwind-merge": "^3.5.0", - "tailwindcss": "^4.2.2", - "tw-animate-css": "^1.4.0", + "tailwind-merge": "catalog:", + "tailwindcss": "catalog:", + "tw-animate-css": "catalog:", }, }, "apps/worker": { @@ -130,13 +130,12 @@ "@paws/logger": "workspace:*", "@paws/proxy": "workspace:*", "@paws/snapshot-store": "workspace:*", - "hono": "^4.7.0", - "neverthrow": "^8.2.0", - "prom-client": "^15.1.3", + "hono": "catalog:", + "neverthrow": "catalog:", + "prom-client": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/cli": { @@ -151,127 +150,126 @@ "@paws/domain-session": "workspace:*", "@paws/sdk": "workspace:*", "ink": "^6.0.0", - "react": "^19.1.0", + "react": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "neverthrow": "^8.2.0", - "vitest": "^4.1.2", + "neverthrow": "catalog:", + "vitest": "catalog:", }, }, "packages/credentials": { "name": "@paws/credentials", "version": "0.1.0", "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "bun-types": "catalog:", + "vitest": "catalog:", }, }, "packages/domains/audit": { "name": "@paws/domain-audit", "version": "0.1.0", "dependencies": { - "@hono/zod-openapi": "^1.2.3", - "zod": "^4.3.6", + "@hono/zod-openapi": "catalog:", + "zod": "catalog:", }, "devDependencies": { "@types/node": "^22.0.0", - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/domains/browser": { "name": "@paws/domain-browser", "version": "0.1.0", "dependencies": { - "@hono/zod-openapi": "^1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/domain-common": "workspace:*", - "zod": "^4.3.6", + "zod": "catalog:", }, "devDependencies": { - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/domains/common": { "name": "@paws/domain-common", "version": "0.1.0", "dependencies": { - "zod": "^4.3.6", + "zod": "catalog:", }, "devDependencies": { - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/domains/daemon": { "name": "@paws/domain-daemon", "version": "0.1.0", "dependencies": { - "@hono/zod-openapi": "^1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/domain-common": "workspace:*", "@paws/domain-network": "workspace:*", "@paws/domain-session": "workspace:*", - "zod": "^4.3.6", + "zod": "catalog:", }, "devDependencies": { - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/domains/fleet": { "name": "@paws/domain-fleet", "version": "0.1.0", "dependencies": { - "@hono/zod-openapi": "^1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/domain-common": "workspace:*", - "zod": "^4.3.6", + "zod": "catalog:", }, "devDependencies": { - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/domains/mcp": { "name": "@paws/domain-mcp", "version": "0.1.0", "dependencies": { - "zod": "^4.3.6", + "zod": "catalog:", }, "devDependencies": { - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/domains/network": { "name": "@paws/domain-network", "version": "0.1.0", "dependencies": { - "zod": "^4.3.6", + "zod": "catalog:", }, "devDependencies": { - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/domains/session": { "name": "@paws/domain-session", "version": "0.1.0", "dependencies": { - "@hono/zod-openapi": "^1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/domain-browser": "workspace:*", "@paws/domain-common": "workspace:*", "@paws/domain-network": "workspace:*", - "zod": "^4.3.6", + "zod": "catalog:", }, "devDependencies": { - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/domains/snapshot": { "name": "@paws/domain-snapshot", "version": "0.1.0", "dependencies": { - "@hono/zod-openapi": "^1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/domain-common": "workspace:*", "@paws/domain-session": "workspace:*", - "zod": "^4.3.6", + "zod": "catalog:", }, "devDependencies": { - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/firecracker": { @@ -279,11 +277,10 @@ "version": "0.1.0", "dependencies": { "@paws/domain-network": "workspace:*", - "neverthrow": "^8.2.0", + "neverthrow": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/integrations": { @@ -292,45 +289,29 @@ "dependencies": { "@octokit/rest": "^22.0.0", "jose": "^6.0.11", - "zod": "^3.25.7", + "zod": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "bun-types": "catalog:", + "vitest": "catalog:", }, }, "packages/logger": { "name": "@paws/logger", "version": "0.1.0", "devDependencies": { - "@types/node": "^25.5.0", - "vitest": "^4.1.2", - }, - }, - "packages/mcp-server": { - "name": "@paws/mcp-server", - "version": "0.1.0", - "bin": { - "paws-mcp": "./src/index.ts", - }, - "dependencies": { - "@modelcontextprotocol/sdk": "^1.28.0", - "@paws/sdk": "workspace:*", - "zod": "^3.25.0", - }, - "devDependencies": { - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/providers": { "name": "@paws/providers", "version": "0.1.0", "dependencies": { - "neverthrow": "^8.2.0", + "neverthrow": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "bun-types": "catalog:", + "vitest": "catalog:", }, }, "packages/provisioner": { @@ -338,23 +319,22 @@ "version": "0.1.0", "dependencies": { "ssh2": "^1.16.0", - "zod": "^3.25.23", + "zod": "catalog:", }, "devDependencies": { "@types/ssh2": "^1.15.5", - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "bun-types": "catalog:", + "vitest": "catalog:", }, }, "packages/proxy": { "name": "@paws/proxy", "version": "0.1.0", "dependencies": { - "neverthrow": "^8.2.0", + "neverthrow": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/sdk": { @@ -365,11 +345,10 @@ "@paws/domain-fleet": "workspace:*", "@paws/domain-session": "workspace:*", "@paws/domain-snapshot": "workspace:*", - "neverthrow": "^8.2.0", + "neverthrow": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "vitest": "catalog:", }, }, "packages/snapshot-store": { @@ -378,11 +357,11 @@ "dependencies": { "@aws-sdk/client-s3": "^3.800.0", "@aws-sdk/lib-storage": "^3.800.0", - "neverthrow": "^8.2.0", + "neverthrow": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "bun-types": "catalog:", + "vitest": "catalog:", }, }, "packages/typescript-config": { @@ -394,22 +373,22 @@ "version": "0.1.0", "dependencies": { "@aws-sdk/client-ec2": "^3.750.0", - "neverthrow": "^8.2.0", + "neverthrow": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "bun-types": "catalog:", + "vitest": "catalog:", }, }, "providers/hetzner-cloud": { "name": "@paws/provider-hetzner-cloud", "version": "0.1.0", "dependencies": { - "neverthrow": "^8.2.0", + "neverthrow": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "bun-types": "catalog:", + "vitest": "catalog:", }, }, "providers/hetzner-dedicated": { @@ -417,14 +396,39 @@ "version": "0.1.0", "dependencies": { "@paws/providers": "workspace:*", - "neverthrow": "^8.2.0", + "neverthrow": "catalog:", }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2", + "bun-types": "catalog:", + "vitest": "catalog:", }, }, }, + "catalog": { + "@base-ui/react": "^1.3.0", + "@hono/zod-openapi": "^1.2.3", + "@tailwindcss/vite": "^4.2.2", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "better-sqlite3": "^12.8.0", + "bun-types": "^1.3.11", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "drizzle-orm": "^0.45.2", + "hono": "^4.7.0", + "lucide-react": "^1.7.0", + "neverthrow": "^8.2.0", + "prom-client": "^15.1.3", + "react": "^19.2.4", + "react-dom": "^19.2.4", + "shadcn": "^4.1.2", + "tailwind-merge": "^3.5.0", + "tailwindcss": "^4.2.2", + "tw-animate-css": "^1.4.0", + "typescript": "^6.0.2", + "vitest": "^4.1.2", + "zod": "^4.3.6", + }, "packages": { "@alcalzone/ansi-tokenize": ["@alcalzone/ansi-tokenize@0.2.5", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw=="], @@ -1084,8 +1088,6 @@ "@paws/logger": ["@paws/logger@workspace:packages/logger"], - "@paws/mcp-server": ["@paws/mcp-server@workspace:packages/mcp-server"], - "@paws/provider-aws-ec2": ["@paws/provider-aws-ec2@workspace:providers/aws-ec2"], "@paws/provider-hetzner-cloud": ["@paws/provider-hetzner-cloud@workspace:providers/hetzner-cloud"], @@ -1472,6 +1474,8 @@ "@types/better-sqlite3": ["@types/better-sqlite3@7.6.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA=="], + "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], + "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], @@ -3044,14 +3048,6 @@ "@mdx-js/mdx/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], - "@paws/integrations/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - - "@paws/logger/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - - "@paws/mcp-server/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - - "@paws/provisioner/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "@radix-ui/react-accordion/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], "@radix-ui/react-alert-dialog/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], @@ -3326,8 +3322,6 @@ "@inquirer/core/wrap-ansi/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "@paws/logger/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@types/better-sqlite3/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "@types/sax/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], diff --git a/package.json b/package.json index 1581602..394b655 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,39 @@ "name": "paws", "private": true, "description": "Zero-trust credential injection for AI agents — secrets never enter the sandbox", - "workspaces": [ - "packages/*", - "packages/domains/*", - "apps/*", - "providers/*" - ], + "workspaces": { + "packages": [ + "packages/*", + "packages/domains/*", + "apps/*", + "providers/*" + ], + "catalog": { + "vitest": "^4.1.2", + "neverthrow": "^8.2.0", + "zod": "^4.3.6", + "bun-types": "^1.3.11", + "@hono/zod-openapi": "^1.2.3", + "hono": "^4.7.0", + "prom-client": "^15.1.3", + "react": "^19.2.4", + "react-dom": "^19.2.4", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@base-ui/react": "^1.3.0", + "lucide-react": "^1.7.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "tailwind-merge": "^3.5.0", + "tw-animate-css": "^1.4.0", + "tailwindcss": "^4.2.2", + "@tailwindcss/vite": "^4.2.2", + "shadcn": "^4.1.2", + "typescript": "^6.0.2", + "better-sqlite3": "^12.8.0", + "drizzle-orm": "^0.45.2" + } + }, "scripts": { "build": "turbo run build", "test": "turbo run test", @@ -32,13 +59,14 @@ "prepare": "husky" }, "dependencies": { - "better-sqlite3": "^12.8.0", - "drizzle-orm": "^0.45.2" + "better-sqlite3": "catalog:", + "drizzle-orm": "catalog:" }, "devDependencies": { "@changesets/changelog-github": "^0.6.0", "@changesets/cli": "^2.30.0", "@types/better-sqlite3": "^7.6.13", + "@types/bun": "^1.3.11", "drizzle-kit": "^0.31.10", "husky": "^9.1.7", "knip": "^6.0.6", @@ -47,7 +75,7 @@ "oxlint": "^1.57.0", "syncpack": "^14.2.1", "turbo": "^2.5.0", - "typescript": "^6.0.2" + "typescript": "catalog:" }, "lint-staged": { "*.{ts,tsx}": [ diff --git a/packages/cli/package.json b/packages/cli/package.json index 65df87b..7dce0ff 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -24,11 +24,10 @@ "@paws/domain-session": "workspace:*", "@paws/sdk": "workspace:*", "ink": "^6.0.0", - "react": "^19.1.0" + "react": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "neverthrow": "^8.2.0", - "vitest": "^4.1.2" + "neverthrow": "catalog:", + "vitest": "catalog:" } } diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index de28c64..ee8db8d 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -3,8 +3,7 @@ "compilerOptions": { "outDir": "dist", "rootDir": "src", - "jsx": "react-jsx", - "types": ["bun-types"] + "jsx": "react-jsx" }, "include": ["src"], "references": [{ "path": "../domains/common" }, { "path": "../sdk" }] diff --git a/packages/credentials/package.json b/packages/credentials/package.json index cc62add..25df0a6 100644 --- a/packages/credentials/package.json +++ b/packages/credentials/package.json @@ -14,7 +14,7 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "bun-types": "catalog:", + "vitest": "catalog:" } } diff --git a/packages/credentials/tsconfig.json b/packages/credentials/tsconfig.json index a086b14..7c4a269 100644 --- a/packages/credentials/tsconfig.json +++ b/packages/credentials/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" diff --git a/packages/domains/audit/package.json b/packages/domains/audit/package.json index 317de83..545c254 100644 --- a/packages/domains/audit/package.json +++ b/packages/domains/audit/package.json @@ -16,11 +16,11 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@hono/zod-openapi": "^1.2.3", - "zod": "^4.3.6" + "@hono/zod-openapi": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@types/node": "^22.0.0", - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/domains/audit/tsconfig.json b/packages/domains/audit/tsconfig.json index 036de9e..8a9a2a4 100644 --- a/packages/domains/audit/tsconfig.json +++ b/packages/domains/audit/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../packages/typescript-config/library.json", "compilerOptions": { "composite": true, "outDir": "dist", diff --git a/packages/domains/browser/package.json b/packages/domains/browser/package.json index 676a77a..47387b8 100644 --- a/packages/domains/browser/package.json +++ b/packages/domains/browser/package.json @@ -16,11 +16,11 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@hono/zod-openapi": "^1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/domain-common": "workspace:*", - "zod": "^4.3.6" + "zod": "catalog:" }, "devDependencies": { - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/domains/browser/tsconfig.json b/packages/domains/browser/tsconfig.json index c6af81f..a5102fb 100644 --- a/packages/domains/browser/tsconfig.json +++ b/packages/domains/browser/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../packages/typescript-config/library.json", "compilerOptions": { "composite": true, "outDir": "dist", diff --git a/packages/domains/common/package.json b/packages/domains/common/package.json index 1ae9d7f..6061a89 100644 --- a/packages/domains/common/package.json +++ b/packages/domains/common/package.json @@ -16,9 +16,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "zod": "^4.3.6" + "zod": "catalog:" }, "devDependencies": { - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/domains/common/tsconfig.json b/packages/domains/common/tsconfig.json index c6af81f..a5102fb 100644 --- a/packages/domains/common/tsconfig.json +++ b/packages/domains/common/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../packages/typescript-config/library.json", "compilerOptions": { "composite": true, "outDir": "dist", diff --git a/packages/domains/daemon/package.json b/packages/domains/daemon/package.json index bd6313d..7bd1f99 100644 --- a/packages/domains/daemon/package.json +++ b/packages/domains/daemon/package.json @@ -16,13 +16,13 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@hono/zod-openapi": "^1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/domain-common": "workspace:*", "@paws/domain-network": "workspace:*", "@paws/domain-session": "workspace:*", - "zod": "^4.3.6" + "zod": "catalog:" }, "devDependencies": { - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/domains/daemon/tsconfig.json b/packages/domains/daemon/tsconfig.json index c6af81f..a5102fb 100644 --- a/packages/domains/daemon/tsconfig.json +++ b/packages/domains/daemon/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../packages/typescript-config/library.json", "compilerOptions": { "composite": true, "outDir": "dist", diff --git a/packages/domains/fleet/package.json b/packages/domains/fleet/package.json index 19d14a3..9abbab4 100644 --- a/packages/domains/fleet/package.json +++ b/packages/domains/fleet/package.json @@ -16,11 +16,11 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@hono/zod-openapi": "^1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/domain-common": "workspace:*", - "zod": "^4.3.6" + "zod": "catalog:" }, "devDependencies": { - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/domains/fleet/tsconfig.json b/packages/domains/fleet/tsconfig.json index c6af81f..a5102fb 100644 --- a/packages/domains/fleet/tsconfig.json +++ b/packages/domains/fleet/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../packages/typescript-config/library.json", "compilerOptions": { "composite": true, "outDir": "dist", diff --git a/packages/domains/mcp/package.json b/packages/domains/mcp/package.json index 7cc50b4..f905900 100644 --- a/packages/domains/mcp/package.json +++ b/packages/domains/mcp/package.json @@ -16,9 +16,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "zod": "^4.3.6" + "zod": "catalog:" }, "devDependencies": { - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/domains/mcp/tsconfig.json b/packages/domains/mcp/tsconfig.json index c6af81f..a5102fb 100644 --- a/packages/domains/mcp/tsconfig.json +++ b/packages/domains/mcp/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../packages/typescript-config/library.json", "compilerOptions": { "composite": true, "outDir": "dist", diff --git a/packages/domains/network/package.json b/packages/domains/network/package.json index 99a0cb5..63f1e06 100644 --- a/packages/domains/network/package.json +++ b/packages/domains/network/package.json @@ -16,9 +16,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "zod": "^4.3.6" + "zod": "catalog:" }, "devDependencies": { - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/domains/network/tsconfig.json b/packages/domains/network/tsconfig.json index c6af81f..a5102fb 100644 --- a/packages/domains/network/tsconfig.json +++ b/packages/domains/network/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../packages/typescript-config/library.json", "compilerOptions": { "composite": true, "outDir": "dist", diff --git a/packages/domains/session/package.json b/packages/domains/session/package.json index 97690cd..4d3d72a 100644 --- a/packages/domains/session/package.json +++ b/packages/domains/session/package.json @@ -16,13 +16,13 @@ "typecheck": "tsc --build" }, "dependencies": { - "@hono/zod-openapi": "^1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/domain-browser": "workspace:*", "@paws/domain-common": "workspace:*", "@paws/domain-network": "workspace:*", - "zod": "^4.3.6" + "zod": "catalog:" }, "devDependencies": { - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/domains/session/tsconfig.json b/packages/domains/session/tsconfig.json index c6af81f..a5102fb 100644 --- a/packages/domains/session/tsconfig.json +++ b/packages/domains/session/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../packages/typescript-config/library.json", "compilerOptions": { "composite": true, "outDir": "dist", diff --git a/packages/domains/snapshot/package.json b/packages/domains/snapshot/package.json index ef61d34..cf01a27 100644 --- a/packages/domains/snapshot/package.json +++ b/packages/domains/snapshot/package.json @@ -16,12 +16,12 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@hono/zod-openapi": "^1.2.3", + "@hono/zod-openapi": "catalog:", "@paws/domain-common": "workspace:*", "@paws/domain-session": "workspace:*", - "zod": "^4.3.6" + "zod": "catalog:" }, "devDependencies": { - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/domains/snapshot/tsconfig.json b/packages/domains/snapshot/tsconfig.json index c6af81f..a5102fb 100644 --- a/packages/domains/snapshot/tsconfig.json +++ b/packages/domains/snapshot/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../packages/typescript-config/library.json", "compilerOptions": { "composite": true, "outDir": "dist", diff --git a/packages/firecracker/package.json b/packages/firecracker/package.json index fd873a2..4aad164 100644 --- a/packages/firecracker/package.json +++ b/packages/firecracker/package.json @@ -18,10 +18,9 @@ }, "dependencies": { "@paws/domain-network": "workspace:*", - "neverthrow": "^8.2.0" + "neverthrow": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/firecracker/tsconfig.json b/packages/firecracker/tsconfig.json index 9672e25..0b0cc8d 100644 --- a/packages/firecracker/tsconfig.json +++ b/packages/firecracker/tsconfig.json @@ -2,8 +2,7 @@ "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", - "types": ["bun-types"] + "rootDir": "src" }, "include": ["src"], "references": [{ "path": "../domains/network" }] diff --git a/packages/integrations/package.json b/packages/integrations/package.json index be6331f..37f6299 100644 --- a/packages/integrations/package.json +++ b/packages/integrations/package.json @@ -16,10 +16,10 @@ "dependencies": { "@octokit/rest": "^22.0.0", "jose": "^6.0.11", - "zod": "^3.25.7" + "zod": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "bun-types": "catalog:", + "vitest": "catalog:" } } diff --git a/packages/integrations/tsconfig.json b/packages/integrations/tsconfig.json index a086b14..7c4a269 100644 --- a/packages/integrations/tsconfig.json +++ b/packages/integrations/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" diff --git a/packages/logger/package.json b/packages/logger/package.json index a91939c..4566b00 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -16,7 +16,6 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@types/node": "^25.5.0", - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/logger/tsconfig.json b/packages/logger/tsconfig.json index 57bf531..7c4a269 100644 --- a/packages/logger/tsconfig.json +++ b/packages/logger/tsconfig.json @@ -1,9 +1,8 @@ { - "extends": "../../tsconfig.json", + "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", - "types": ["node"] + "rootDir": "src" }, "include": ["src"] } diff --git a/packages/providers/package.json b/packages/providers/package.json index 4270354..dcf3de4 100644 --- a/packages/providers/package.json +++ b/packages/providers/package.json @@ -16,10 +16,10 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "neverthrow": "^8.2.0" + "neverthrow": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "bun-types": "catalog:", + "vitest": "catalog:" } } diff --git a/packages/providers/tsconfig.json b/packages/providers/tsconfig.json index 8c94c91..7c4a269 100644 --- a/packages/providers/tsconfig.json +++ b/packages/providers/tsconfig.json @@ -1,9 +1,8 @@ { - "extends": "../../tsconfig.json", + "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", - "types": [] + "rootDir": "src" }, "include": ["src"] } diff --git a/packages/provisioner/package.json b/packages/provisioner/package.json index e031194..d7629cf 100644 --- a/packages/provisioner/package.json +++ b/packages/provisioner/package.json @@ -15,11 +15,11 @@ }, "dependencies": { "ssh2": "^1.16.0", - "zod": "^3.25.23" + "zod": "catalog:" }, "devDependencies": { "@types/ssh2": "^1.15.5", - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "bun-types": "catalog:", + "vitest": "catalog:" } } diff --git a/packages/provisioner/tsconfig.json b/packages/provisioner/tsconfig.json index a086b14..7c4a269 100644 --- a/packages/provisioner/tsconfig.json +++ b/packages/provisioner/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" diff --git a/packages/proxy/package.json b/packages/proxy/package.json index ff86f4a..3f88bca 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -17,10 +17,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "neverthrow": "^8.2.0" + "neverthrow": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/proxy/tsconfig.json b/packages/proxy/tsconfig.json index a086b14..7c4a269 100644 --- a/packages/proxy/tsconfig.json +++ b/packages/proxy/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 92b5b82..b13e35c 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -20,10 +20,9 @@ "@paws/domain-fleet": "workspace:*", "@paws/domain-session": "workspace:*", "@paws/domain-snapshot": "workspace:*", - "neverthrow": "^8.2.0" + "neverthrow": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "vitest": "catalog:" } } diff --git a/packages/sdk/src/client.test.ts b/packages/sdk/src/client.test.ts index 1ba6d0d..f500dda 100644 --- a/packages/sdk/src/client.test.ts +++ b/packages/sdk/src/client.test.ts @@ -7,7 +7,9 @@ import { PawsApiError, PawsNetworkError } from './errors.js'; // Helpers // --------------------------------------------------------------------------- -function mockFetch(status: number, body: unknown): typeof globalThis.fetch { +type FetchFn = (input: RequestInfo | URL, init?: RequestInit) => Promise; + +function mockFetch(status: number, body: unknown): FetchFn { return vi.fn().mockResolvedValue({ ok: status >= 200 && status < 300, status, @@ -15,7 +17,7 @@ function mockFetch(status: number, body: unknown): typeof globalThis.fetch { }); } -function client(fetch: typeof globalThis.fetch) { +function client(fetch: FetchFn) { return createClient({ baseUrl: 'http://localhost:4000', apiKey: 'test-key', @@ -378,7 +380,8 @@ describe('error handling', () => { await c.fleet.overview(); - const callHeaders = (fetch as ReturnType).mock.calls[0]![1].headers; + const mock = vi.mocked(fetch); + const callHeaders = mock.mock.calls[0]![1]!.headers as Record; expect(callHeaders['Content-Type']).toBeUndefined(); }); }); diff --git a/packages/sdk/src/client.ts b/packages/sdk/src/client.ts index 6ffaeb9..1d5f64a 100644 --- a/packages/sdk/src/client.ts +++ b/packages/sdk/src/client.ts @@ -33,7 +33,7 @@ export interface ClientConfig { /** API key for Authorization header */ apiKey: string; /** Optional fetch implementation (for testing) */ - fetch?: typeof globalThis.fetch; + fetch?: (input: RequestInfo | URL, init?: RequestInit) => Promise; /** Default timeout in ms for requests (default: 30_000) */ timeoutMs?: number; } diff --git a/packages/sdk/tsconfig.json b/packages/sdk/tsconfig.json index 10cba16..ed3f373 100644 --- a/packages/sdk/tsconfig.json +++ b/packages/sdk/tsconfig.json @@ -2,8 +2,7 @@ "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", - "types": [] + "rootDir": "src" }, "include": ["src"], "references": [{ "path": "../domains/common" }] diff --git a/packages/snapshot-store/package.json b/packages/snapshot-store/package.json index a65ca00..3da7766 100644 --- a/packages/snapshot-store/package.json +++ b/packages/snapshot-store/package.json @@ -18,10 +18,10 @@ "dependencies": { "@aws-sdk/client-s3": "^3.800.0", "@aws-sdk/lib-storage": "^3.800.0", - "neverthrow": "^8.2.0" + "neverthrow": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "bun-types": "catalog:", + "vitest": "catalog:" } } diff --git a/packages/snapshot-store/tsconfig.json b/packages/snapshot-store/tsconfig.json index a086b14..7c4a269 100644 --- a/packages/snapshot-store/tsconfig.json +++ b/packages/snapshot-store/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" diff --git a/packages/typescript-config/app-bun.json b/packages/typescript-config/app-bun.json new file mode 100644 index 0000000..a84d69e --- /dev/null +++ b/packages/typescript-config/app-bun.json @@ -0,0 +1,8 @@ +{ + "extends": "./base.json", + "compilerOptions": { + "declaration": false, + "outDir": "dist", + "rootDir": "src" + } +} diff --git a/packages/typescript-config/app-react.json b/packages/typescript-config/app-react.json new file mode 100644 index 0000000..7fb11eb --- /dev/null +++ b/packages/typescript-config/app-react.json @@ -0,0 +1,10 @@ +{ + "extends": "./base.json", + "compilerOptions": { + "declaration": false, + "outDir": "dist", + "rootDir": "src", + "jsx": "react-jsx", + "types": ["vite/client"] + } +} diff --git a/packages/typescript-config/base.json b/packages/typescript-config/base.json new file mode 100644 index 0000000..0a2b96c --- /dev/null +++ b/packages/typescript-config/base.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "types": ["@types/bun"], + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, + "sourceMap": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "forceConsistentCasingInFileNames": true, + "verbatimModuleSyntax": true + } +} diff --git a/packages/typescript-config/library.json b/packages/typescript-config/library.json new file mode 100644 index 0000000..a9928a4 --- /dev/null +++ b/packages/typescript-config/library.json @@ -0,0 +1,10 @@ +{ + "extends": "./base.json", + "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": true, + "outDir": "dist", + "rootDir": "src" + } +} diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json new file mode 100644 index 0000000..88cc265 --- /dev/null +++ b/packages/typescript-config/package.json @@ -0,0 +1,5 @@ +{ + "name": "@paws/typescript-config", + "version": "0.0.0", + "private": true +} diff --git a/providers/aws-ec2/package.json b/providers/aws-ec2/package.json index 764fa1e..a4e7d4e 100644 --- a/providers/aws-ec2/package.json +++ b/providers/aws-ec2/package.json @@ -17,10 +17,10 @@ }, "dependencies": { "@aws-sdk/client-ec2": "^3.750.0", - "neverthrow": "^8.2.0" + "neverthrow": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "bun-types": "catalog:", + "vitest": "catalog:" } } diff --git a/providers/aws-ec2/tsconfig.json b/providers/aws-ec2/tsconfig.json index a086b14..7c4a269 100644 --- a/providers/aws-ec2/tsconfig.json +++ b/providers/aws-ec2/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" diff --git a/providers/hetzner-cloud/package.json b/providers/hetzner-cloud/package.json index 82d785c..e2741fd 100644 --- a/providers/hetzner-cloud/package.json +++ b/providers/hetzner-cloud/package.json @@ -16,10 +16,10 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "neverthrow": "^8.2.0" + "neverthrow": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "bun-types": "catalog:", + "vitest": "catalog:" } } diff --git a/providers/hetzner-cloud/tsconfig.json b/providers/hetzner-cloud/tsconfig.json index a086b14..7c4a269 100644 --- a/providers/hetzner-cloud/tsconfig.json +++ b/providers/hetzner-cloud/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" diff --git a/providers/hetzner-dedicated/package.json b/providers/hetzner-dedicated/package.json index 3048104..2d3fd61 100644 --- a/providers/hetzner-dedicated/package.json +++ b/providers/hetzner-dedicated/package.json @@ -17,10 +17,10 @@ }, "dependencies": { "@paws/providers": "workspace:*", - "neverthrow": "^8.2.0" + "neverthrow": "catalog:" }, "devDependencies": { - "bun-types": "^1.3.11", - "vitest": "^4.1.2" + "bun-types": "catalog:", + "vitest": "catalog:" } } diff --git a/providers/hetzner-dedicated/tsconfig.json b/providers/hetzner-dedicated/tsconfig.json index 8c94c91..7c4a269 100644 --- a/providers/hetzner-dedicated/tsconfig.json +++ b/providers/hetzner-dedicated/tsconfig.json @@ -1,9 +1,8 @@ { - "extends": "../../tsconfig.json", + "extends": "../../packages/typescript-config/library.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", - "types": [] + "rootDir": "src" }, "include": ["src"] } diff --git a/tsconfig.json b/tsconfig.json index 1d85f48..d680acc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,7 +20,6 @@ { "path": "packages/firecracker" }, { "path": "packages/sdk" }, - { "path": "packages/mcp-server" }, { "path": "packages/cli" }, { "path": "providers/hetzner-cloud" }, { "path": "providers/hetzner-dedicated" },