fix: remove @sofa/core and @sofa/api deps from public-api to fix Vercel runtime compatibility

- Drop `@sofa/core` and `@sofa/api` from `apps/public-api` — importing workspace packages with DB/Node dependencies broke the Vercel edge runtime
- `fetchUserData` on Trakt and Simkl importers now returns raw `unknown` API responses; parsing is deferred to the self-hosted server
- Add `source` + `rawPayload` fields to `ParsePayloadInput`; `parsePayload` procedure now dispatches to `parseTraktPayload`/`parseSimklPayload` and returns full warnings + diagnostics
- Export `ProviderEnum` from `apps/public-api/src/importers/index.ts` instead of defining it inline in `app.ts`
This commit is contained in:
2026-03-23 12:48:04 -04:00
parent 9df1075040
commit cc8909d64e
19 changed files with 250 additions and 396 deletions
+18 -9
View File
@@ -3,7 +3,6 @@ import { ORPCError } from "@orpc/server";
import { AppErrorCode } from "@sofa/api/errors";
import type { ParseResult } from "@sofa/core/imports";
import {
countUnresolved,
getActiveImportJobForUser,
insertImportJob,
parseLetterboxdExport,
@@ -87,17 +86,27 @@ export const parseFile = os.imports.parseFile.use(authed).handler(async ({ input
});
export const parsePayload = os.imports.parsePayload.use(authed).handler(({ input }) => {
const { data } = input;
const { source, rawPayload } = input;
let result: ParseResult;
switch (source) {
case "trakt":
result = parseTraktPayload(rawPayload as Parameters<typeof parseTraktPayload>[0]);
break;
case "simkl":
result = parseSimklPayload(rawPayload as Parameters<typeof parseSimklPayload>[0]);
break;
}
return {
data,
warnings: [],
diagnostics: { unresolved: countUnresolved(data), unsupported: 0 },
data: result.data,
warnings: result.warnings,
diagnostics: result.diagnostics,
stats: {
movies: data.movies.length,
episodes: data.episodes.length,
watchlist: data.watchlist.length,
ratings: data.ratings.length,
movies: result.data.movies.length,
episodes: result.data.episodes.length,
watchlist: result.data.watchlist.length,
ratings: result.data.ratings.length,
},
};
});