Import preview listed sms_charge_* and service_charge_percentage, but
applyImport skipped every out-of-catalog key via isSystemProgramSettingKey,
so "all projects" never persisted and the modal returned every time.
Co-authored-by: Cursor <cursoragent@cursor.com>
Parse both INSERT column orders from deploy_settings_const.sql so
price_provider, zaarbox_api_url, main_product and similar keys are
in the template. Keep template values empty for tokens and per-project IDs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Merge tenant values with the deploy template catalog so every system
setting (e.g. all montzar_* can_edit=0 keys) appears like khaneghi
advanced settings, not only rows already stored for the tenant.
Co-authored-by: Cursor <cursoragent@cursor.com>
Superadmin was seeding all deploy_settings_const INSERT keys including
can_edit=1 entries with wrong defaults (e.g. montzar_product_id=25).
Template/catalog now follow final can_edit=0 from SQL; editable keys are
purged from setting_templates and tenant settings on boot/seed.
Co-authored-by: Cursor <cursoragent@cursor.com>
Catalog keys from the SQL template write onto this tenant automatically; only extra keys need a per-key decision.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add sync-replica-data repair on deploy, a publisher-side replica watch
(60s + after tenant/settings writes), REFRESH PUBLICATION after migrate,
and Cache-Control no-store on program-settings and get_version.
Co-authored-by: Cursor <cursoragent@cursor.com>
Catalog keys are compiled into the API bundle so import no longer depends on an incomplete templates table or missing JSON on the server.
Co-authored-by: Cursor <cursoragent@cursor.com>
Import was posting to /admin/login without provider=user, so no token came back even with valid credentials.
Co-authored-by: Cursor <cursoragent@cursor.com>
Template defaults seed from deploy_settings_const; new tenants copy them, import decides per key, and /get_settings reads the per-tenant rows.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sold apps can read settings from /get_settings; Super Admin saves only changed keys so huge runtime logs are not sent in the body.
Co-authored-by: Cursor <cursoragent@cursor.com>
Cast stored JSON through asSettingsArray so tsc accepts the snapshot payload, and strip Prisma ?schema= from DATABASE_URL before psql.
Co-authored-by: Cursor <cursoragent@cursor.com>
Import can_edit=0 settings via the sold version's admin login + get_settings, for Super Admin program-settings UI.
Co-authored-by: Cursor <cursoragent@cursor.com>