mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-07-14 17:05:56 -04:00
* feat: reorganize API around operation domains
Restructure the oRPC contract from 14 resource-oriented routers to 8
domain-oriented routers for a cleaner public API surface.
- Consolidate 7 watch procedures into unified tracking.watch/unwatch
with scope + ids input (movie, episode, season, series)
- Split dashboard across tracking (stats, history), library
(continueWatching, upcoming), and discover (recommendations)
- Merge explore + search + discover into single discover router
- Absorb integrations into account.integrations
- Merge system.authConfig into system.publicInfo
- Collapse 6 admin setting endpoints into admin.settings.get/update
- Deduplicate platforms.list + explore.watchProviders into
discover.platforms
- Add symmetric unwatchMovie/unwatchSeries core functions
- Rename titles.detail→get, titles.recommendations→similar,
people.detail→get
BREAKING CHANGE: All client API paths have changed. REST paths now
mirror router structure.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: address review feedback on API reorganization
- Fix updateRating invalidation in native app — was only invalidating
title queries, now calls invalidateTitleQueries() to also refresh
tracking.userInfo (drives the rating UI)
- Make unwatchMovie status revert consistent with unwatchSeries — revert
any non-watchlist status, not just "completed"
- Add sync invariant comment on handleWatch/handleUnwatch loops
- Remove unused queryClient import in native use-title-actions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: updateStatus NOT_FOUND error + rate() invalidation in native
- updateStatus now throws NOT_FOUND when quickAddTitle returns null
(title doesn't exist), instead of silently succeeding
- Add NOT_FOUND error to updateStatus contract definition
- Fix rate() in native title-actions.ts to call invalidateTitleQueries()
instead of only invalidating orpc.titles.key() — mirrors the fix
already applied to the hook-based path in d2ddc0f
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: expand mobile app docs and add Play Store badge
- Add the Google Play badge to the README alongside the App Store badge
- Expand the mobile app docs with the Android/Play Store release details
- Refresh docs site dependencies and related package versions for the updated docs stack
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
93 lines
3.0 KiB
JSON
93 lines
3.0 KiB
JSON
{
|
|
"name": "sofa-monorepo",
|
|
"private": true,
|
|
"workspaces": {
|
|
"packages": [
|
|
"apps/*",
|
|
"packages/*"
|
|
],
|
|
"catalog": {
|
|
"@better-auth/expo": "1.5.6",
|
|
"@lingui/babel-plugin-lingui-macro": "5.9.3",
|
|
"@lingui/cli": "5.9.3",
|
|
"@lingui/conf": "5.9.3",
|
|
"@lingui/core": "5.9.3",
|
|
"@lingui/format-po": "5.9.3",
|
|
"@lingui/metro-transformer": "5.9.3",
|
|
"@lingui/react": "5.9.3",
|
|
"@lingui/vite-plugin": "5.9.3",
|
|
"@orpc/client": "1.13.13",
|
|
"@orpc/contract": "1.13.13",
|
|
"@orpc/json-schema": "1.13.13",
|
|
"@orpc/openapi": "1.13.13",
|
|
"@orpc/server": "1.13.13",
|
|
"@orpc/tanstack-query": "1.13.13",
|
|
"@orpc/zod": "1.13.13",
|
|
"@tanstack/react-form": "1.28.5",
|
|
"@tanstack/react-query": "5.95.2",
|
|
"@types/bun": "1.3.11",
|
|
"@types/node": "25.5.0",
|
|
"@types/react": "19.2.14",
|
|
"@vitest/browser": "4.1.2",
|
|
"@vitest/browser-playwright": "4.1.2",
|
|
"@vitest/coverage-v8": "4.1.2",
|
|
"better-auth": "1.5.6",
|
|
"drizzle-kit": "1.0.0-beta.19",
|
|
"drizzle-orm": "1.0.0-beta.19",
|
|
"react": "19.2.0",
|
|
"react-dom": "19.2.0",
|
|
"tailwind-merge": "3.5.0",
|
|
"tailwindcss": "4.2.2",
|
|
"thumbhash": "0.1.1",
|
|
"typescript": "5.9.3",
|
|
"vitest": "4.1.2",
|
|
"zod": "4.3.6"
|
|
}
|
|
},
|
|
"scripts": {
|
|
"dev": "turbo run dev",
|
|
"dev:web": "turbo run dev --filter=@sofa/web --filter=@sofa/server",
|
|
"dev:native": "turbo run dev --filter=@sofa/native",
|
|
"dev:docs": "cd docs && bun run dev",
|
|
"build": "turbo run build",
|
|
"lint": "turbo run lint",
|
|
"format": "turbo run format",
|
|
"format:check": "turbo run format:check",
|
|
"check-types": "turbo run check-types",
|
|
"test": "turbo run test",
|
|
"clean": "rm -rf .turbo \"apps/*/.turbo\" \"apps/*/node_modules\" \"apps/*/*.tsbuildinfo\" \"apps/*/dist\" \"packages/*/.turbo\" \"packages/*/node_modules\" \"packages/*/*.tsbuildinfo\" node_modules bun.lock",
|
|
"generate:openapi": "bun scripts/generate-openapi-spec.ts && cd docs && bun run generate:api-docs",
|
|
"i18n:extract": "lingui extract",
|
|
"i18n:claude": "bun packages/i18n/scripts/claude.ts",
|
|
"sync:providers": "bun scripts/sync-tmdb-providers.ts"
|
|
},
|
|
"devDependencies": {
|
|
"@e18e/eslint-plugin": "0.3.0",
|
|
"@lingui/cli": "catalog:",
|
|
"@lingui/conf": "catalog:",
|
|
"@lingui/format-po": "catalog:",
|
|
"@tanstack/eslint-plugin-query": "5.95.2",
|
|
"@tanstack/eslint-plugin-router": "1.161.6",
|
|
"@vitest/browser": "catalog:",
|
|
"@vitest/browser-playwright": "catalog:",
|
|
"@vitest/coverage-v8": "catalog:",
|
|
"eslint-plugin-drizzle": "0.2.3",
|
|
"eslint-plugin-lingui": "0.12.0",
|
|
"eslint-plugin-react-hooks": "7.0.1",
|
|
"oxfmt": "0.42.0",
|
|
"oxlint": "1.57.0",
|
|
"playwright": "1.58.2",
|
|
"turbo": "2.8.20",
|
|
"typescript": "catalog:",
|
|
"vitest": "catalog:"
|
|
},
|
|
"packageManager": "bun@1.3.11",
|
|
"trustedDependencies": [
|
|
"@sentry/cli",
|
|
"better-sqlite3",
|
|
"esbuild",
|
|
"msw",
|
|
"sharp"
|
|
]
|
|
}
|