8f20b2ef1b
- Nya toppnivåblock i /ops/v1/summary: ai_scan, aktivering, engagemang, betalning, jobb, sakerhet. Alla värden läses från DB/cache; null där data saknas, inga påhittade värden. - AI-kostnad i USD mikrocent (native); intäkter fortsatt SEK-öre. - product_analytics_events är källa för volym, latens, lyckandegrad, felfrekvens, aktivering, retention och engagemang. - Nya händelser: scan_started (API) och scan_failed/scan_completed med latencyMs + felkod (worker). latencyMs flödar nu in i scan_completed. - Safety canary-jobb varje timme: re-härleder allergener för alla recept, räknar överifierade publika recept och food-safety-lint; skriver EN rad till ops_safety_canary. Endpointen läser endast sista raden. - Cache-refresh-jobb var 60 s skriver hela summariet till Redis; endpointen serverar cachen med 503 vid cache-miss. - Bearer-token-skydd med OPS_TOKEN; HTTPS-tvång i produktion; ingen PII. - Tester för endpoint, auth, cache-miss och safety canary.
54 lines
1.5 KiB
JSON
54 lines
1.5 KiB
JSON
{
|
||
"name": "@app/worker",
|
||
"version": "0.1.0",
|
||
"private": true,
|
||
"type": "module",
|
||
"description": "Worker – asynkrona jobb: bildanalys via AAMOS, kvitton, veckoplan, minne, notiser, subscriptions (spec §54)",
|
||
"scripts": {
|
||
"dev": "tsx watch src/index.ts",
|
||
"start": "node dist/index.js",
|
||
"build": "tsup src/index.ts --format esm --target node22 --sourcemap --clean",
|
||
"typecheck": "tsc --noEmit",
|
||
"test": "vitest run --passWithNoTests",
|
||
"eval": "tsx src/eval/run.ts",
|
||
"eval:scan": "tsx src/eval/scan-eval.ts"
|
||
},
|
||
"dependencies": {
|
||
"@app/ai-contracts": "workspace:*",
|
||
"@app/analytics": "workspace:*",
|
||
"@app/database": "workspace:*",
|
||
"@app/events": "workspace:*",
|
||
"@app/inventory-engine": "workspace:*",
|
||
"@app/memory-client": "workspace:*",
|
||
"@app/nutrition-engine": "workspace:*",
|
||
"@app/recipe-engine": "workspace:*",
|
||
"@app/recommendation-engine": "workspace:*",
|
||
"@app/shared-types": "workspace:*",
|
||
"@app/subscriptions": "workspace:*",
|
||
"bullmq": "^6.0.0",
|
||
"dotenv": "^16.4.0",
|
||
"drizzle-orm": "^0.45.0",
|
||
"ioredis": "^6.0.0",
|
||
"pg": "^8.13.0"
|
||
},
|
||
"devDependencies": {
|
||
"@types/pg": "^8.11.0",
|
||
"tsup": "^8.3.0"
|
||
},
|
||
"tsup": {
|
||
"noExternal": [
|
||
"@app/ai-contracts",
|
||
"@app/analytics",
|
||
"@app/database",
|
||
"@app/events",
|
||
"@app/inventory-engine",
|
||
"@app/memory-client",
|
||
"@app/nutrition-engine",
|
||
"@app/recipe-engine",
|
||
"@app/recommendation-engine",
|
||
"@app/shared-types",
|
||
"@app/subscriptions"
|
||
]
|
||
}
|
||
}
|