Files
accounted/vercel.json
T
Mattsson 4a9fa5e6c5 feat(inbox): staged upload ack, HEIC/HEIF validation, WhatsApp silence fixes (#1605)
* fix(whatsapp): app-side unmute, close silent intake paths, health visibility

- add POST /link/unmute and a Reactivate control on the Pausad state
- company resolution: transient query errors release the row for sweep
  retry; genuine zero-options sends M19 instead of parking silently
- media from unlinked senders bypasses the hourly greeting throttle
  (10 min burst window, daily cap kept)
- GET /link returns 7-day failed-delivery and parked-inbound counts;
  sweep summary logs outboundFailed24h

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(documents): real HEIC/HEIF magic-byte validation, bilingual upload errors

- detect ISO-BMFF ftyp brands (heic/heix/heim/heis/hevc/hevx/hevm/hevs,
  mif1/msf1) instead of exempting image/heic from validation; declared
  heic/heif accepts either family member (iOS labels vary)
- new INBOX_UPLOAD_* structured error codes replace raw English strings
  on the inbox upload and attach-document routes
- registry doc corrected to the real 10 MB cap

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(inbox): staged upload with instant ack and deferred AI extraction

- web uploads insert the inbox item as status processing and respond
  immediately; Bedrock extraction and supplier match run via after()
  with a CAS flip to received (email and WhatsApp channels keep the
  synchronous path)
- widen invoice_inbox_items.status CHECK to include processing
  (migration 20260813180000, pg-real test included)
- crash-recovery sweep cron (*/2) flips stale processing rows;
  bulk-book skips extraction_in_progress items
- workspace: processing chip, in-flight rows disable actions, realtime
  flip, retry-extraction button for empty extractions
- picker accept list drops HEIC/HEIF so iOS transcodes library photos
  to JPEG; server allowlists unchanged (supersedes 2026-08-01 HEIC
  decision, see DECISIONS.md)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(migrations): bump inbox processing-status migration past main's latest

Main merged 20260813210000 while this PR was in flight; an inserted
version older than the latest applied aborts the prod db push at merge.
Renamed 20260813180000 to 20260813213000 and updated references.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(decisions): log preview-tracker orphan repair after migration rename

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 23:57:53 +02:00

98 lines
2.2 KiB
JSON

{
"regions": ["arn1"],
"crons": [
{
"path": "/api/deadlines/status/cron",
"schedule": "0 6 * * *"
},
{
"path": "/api/invoices/recurring/cron",
"schedule": "0 * * * *"
},
{
"path": "/api/settings/booking-templates/sync/cron",
"schedule": "30 4 * * *"
},
{
"path": "/api/tax-deadlines/cron",
"schedule": "0 0 * * *"
},
{
"path": "/api/extensions/enable-banking/sync/cron",
"schedule": "0 5 * * *"
},
{
"path": "/api/extensions/stripe/transactions/cron",
"schedule": "30 3 * * *"
},
{
"path": "/api/extensions/woocommerce/orders/cron",
"schedule": "45 3 * * *"
},
{
"path": "/api/extensions/shopify/orders/cron",
"schedule": "15 3 * * *"
},
{
"path": "/api/documents/verify/cron",
"schedule": "0 3 * * *"
},
{
"path": "/api/sandbox/cleanup/cron",
"schedule": "0 4 * * *"
},
{
"path": "/api/events/cleanup/cron",
"schedule": "0 2 * * *"
},
{
"path": "/api/extensions/cloud-backup/auto-sync/cron",
"schedule": "0 * * * *"
},
{
"path": "/api/idempotency/cleanup/cron",
"schedule": "30 * * * *"
},
{
"path": "/api/pending-operations/expire/cron",
"schedule": "30 2 * * *"
},
{
"path": "/api/extensions/skatteverket/skattekonto/sync/cron",
"schedule": "0 4 * * *"
},
{
"path": "/api/extensions/skatteverket/agi/kvittenser/cron",
"schedule": "*/15 * * * *"
},
{
"path": "/api/extensions/skatteverket/vat/kvittenser/cron",
"schedule": "30 */2 * * *"
},
{
"path": "/api/webhooks/dispatch/cron",
"schedule": "* * * * *"
},
{
"path": "/api/extensions/whatsapp-inbox/sweep/cron",
"schedule": "* * * * *"
},
{
"path": "/api/extensions/whatsapp-inbox/retention/cron",
"schedule": "15 4 * * *"
},
{
"path": "/api/extensions/invoice-inbox/sweep/cron",
"schedule": "*/2 * * * *"
},
{
"path": "/api/bookkeeping/accruals/post-due/cron",
"schedule": "15 5 * * *"
},
{
"path": "/api/receipt-hunt/cron",
"schedule": "30 5 * * *"
}
]
}