Files
Keysat 0ae59f3550 Add multi-tenant cloud mode: self-serve purchase, credit metering, core-decoupling
Introduces RECAP_MODE=multi alongside single-mode self-host:
- Tenant auth + accounts (magic-link via System SMTP), per-tenant credit pool,
  anonymous trial minting with per-IP/-64 caps
- Self-serve Pro/Max purchase: inline Lightning (BTCPay) + card (Zaprite),
  prepaid 30-day periods, expiry-reminder emails
- Core-decoupling: relay owns cloud tier/expiry keyed by Recaps user-id
- SQLite (better-sqlite3) schema for multi-mode; filesystem unchanged for single
- StartOS actions/versions through 0.2.155
2026-06-13 14:25:05 -05:00

14 lines
1.7 KiB
TypeScript

import { VersionInfo } from '@start9labs/start-sdk'
export const v_0_2_135 = VersionInfo.of({
version: '0.2.135:0',
releaseNotes: {
en_US:
"Subscription auto-processor — fixed a relay-only-user dead-end. Symptom: a subscription check would find a new video, queue it for approval, and log 'Kicking background processor for N approved item(s)…' — and then nothing would happen. No output in the UI, no job submitted to the relay, no error surfaced. Root cause: processItemInternally (the function the background processor uses to internally POST to /api/process) hard-required a local Gemini API key as a pre-flight gate, a legacy check from before the relay-as-provider model. Users with the relay configured but no local Gemini key would fail this check immediately, get caught by the processor's catch block, and silently land their error in the in-memory processingState.log — invisible from the dashboard. /api/process itself was never called. Fix: drop the Gemini-only gate. Auto-queue now prefers the relay when a relay URL is configured (the modern default for fresh installs and the most common setup), falls back to Gemini when only a local key is configured, and fails with a clear, user-visible error when neither is set. Sets transcriptionProvider + analysisProvider + matching model fields on the internal /api/process POST so the request reaches the right backend instead of falling through to the default 'gemini' provider that has no key. Existing Gemini-only setups keep working; existing relay-only setups now actually process subscription-discovered videos.",
},
migrations: {
up: async ({ effects }) => {},
down: async ({ effects }) => {},
},
})