mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-08-20 05:21:44 +10:00
Public resume pages only produced their OpenGraph and Twitter tags client side, so a shared link had no card at all. The server now injects them into the shell and swaps in the resume's own title and description. The lookup is scoped to public, password-free resumes and deliberately avoids resumeService.getBySlug: that counts a view and would expose a protected resume's summary to an unauthenticated crawler. User-authored values are escaped before they reach the HTML, and any lookup failure falls back to the plain shell. getResumeSocialMeta is shared with the client route head so the two cannot drift.
69 lines
2.4 KiB
JSON
69 lines
2.4 KiB
JSON
{
|
|
"name": "@reactive-resume/api",
|
|
"version": "0.0.0",
|
|
"type": "module",
|
|
"private": true,
|
|
"exports": {
|
|
"./context": "./src/context.ts",
|
|
"./features/flags": "./src/features/flags/index.ts",
|
|
"./features/resume/export": "./src/features/resume/export.ts",
|
|
"./features/resume/public-pdf": "./src/features/resume/public-pdf.ts",
|
|
"./features/resume/social-meta": "./src/features/resume/social-meta.ts",
|
|
"./features/storage": "./src/features/storage/index.ts",
|
|
"./routers": "./src/routers/index.ts"
|
|
},
|
|
"scripts": {
|
|
"typecheck": "tsgo --noEmit",
|
|
"test": "vitest run --passWithNoTests",
|
|
"test:coverage": "vitest run --coverage --passWithNoTests",
|
|
"test:ci": "vitest run --coverage --reporter=default --reporter=github-actions --reporter=json --reporter=junit --outputFile.json=reports/vitest-results.json --outputFile.junit=reports/vitest-junit.xml --passWithNoTests",
|
|
"test:agent": "vitest run --reporter=agent --reporter=json --outputFile.json=reports/vitest-results.json --passWithNoTests"
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/anthropic": "^4.0.36",
|
|
"@ai-sdk/cerebras": "^3.0.28",
|
|
"@ai-sdk/cohere": "^4.0.25",
|
|
"@ai-sdk/deepseek": "^3.0.26",
|
|
"@ai-sdk/fireworks": "^3.0.30",
|
|
"@ai-sdk/google": "^4.0.39",
|
|
"@ai-sdk/groq": "^4.0.26",
|
|
"@ai-sdk/mistral": "^4.0.27",
|
|
"@ai-sdk/openai": "^4.0.36",
|
|
"@ai-sdk/openai-compatible": "^3.0.28",
|
|
"@ai-sdk/perplexity": "^4.0.27",
|
|
"@ai-sdk/togetherai": "^3.0.29",
|
|
"@ai-sdk/xai": "^4.0.33",
|
|
"@aws-sdk/client-s3": "^3.1106.0",
|
|
"@orpc/client": "^1.15.0",
|
|
"@orpc/experimental-ratelimit": "^1.15.0",
|
|
"@orpc/server": "^1.15.0",
|
|
"@reactive-resume/ai": "workspace:*",
|
|
"@reactive-resume/auth": "workspace:*",
|
|
"@reactive-resume/db": "workspace:*",
|
|
"@reactive-resume/env": "workspace:*",
|
|
"@reactive-resume/pdf": "workspace:*",
|
|
"@reactive-resume/resume": "workspace:*",
|
|
"@reactive-resume/schema": "workspace:*",
|
|
"@reactive-resume/utils": "workspace:*",
|
|
"ai": "^7.0.58",
|
|
"bcrypt": "^6.0.0",
|
|
"better-auth": "1.6.26",
|
|
"drizzle-orm": "1.0.0-rc.4",
|
|
"drizzle-zod": "1.0.0-beta.14-a36c63d",
|
|
"es-toolkit": "^1.50.0",
|
|
"ioredis": "^6.0.0",
|
|
"ollama-ai-provider-v2": "^4.0.1",
|
|
"react": "^19.2.8",
|
|
"resumable-stream": "^2.2.12",
|
|
"sharp": "^0.35.3",
|
|
"ts-pattern": "^5.9.0",
|
|
"zod": "^4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@reactive-resume/config": "workspace:*",
|
|
"@types/bcrypt": "^6.0.0",
|
|
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
"typescript": "^7.0.2"
|
|
}
|
|
}
|