array_filter([ 'webmail' => env('TRANSFER_API_KEY_WEBMAIL'), 'sms' => env('TRANSFER_API_KEY_SMS'), ]), // GHS per GB per month of retention (see qr-suite-decomposition.md ยง7.3). 'price_per_gb_month' => (float) env('TRANSFER_PRICE_PER_GB_MONTH', 0.30), // Max single-file upload size (bytes). 0 = no limit (chunked uploads handle large files). 'max_file_bytes' => (int) env('TRANSFER_MAX_FILE_BYTES', 0), // Bit-sized upload sessions (init โ†’ chunk โ†’ finalize), same pattern as hosting file manager. 'chunk_upload' => [ 'path' => env('TRANSFER_CHUNK_UPLOAD_PATH', storage_path('app/chunked_uploads')), 'chunk_size_bytes' => (int) env('TRANSFER_CHUNK_SIZE_BYTES', 5 * 1024 * 1024), ], // Max files per transfer. 'max_files_per_transfer' => (int) env('TRANSFER_MAX_FILES', 20), // Monthly billing cycle length (days) โ€” storage is renewed each period while the wallet can pay. 'billing_period_days' => (int) env('TRANSFER_BILLING_PERIOD_DAYS', 30), // Days to keep files after a failed renewal before automatic deletion. 'grace_period_days' => (int) env('TRANSFER_GRACE_PERIOD_DAYS', 15), // Owner emails when a transfer enters grace and before files are deleted. 'owner_grace_email_milestones' => ['grace_entered', '7', '3', '1'], // Legacy env keys (billing is monthly until cancelled by non-payment + grace). 'default_retention_days' => (int) env('TRANSFER_DEFAULT_RETENTION_DAYS', 30), 'mail_retention_days' => (int) env('TRANSFER_MAIL_RETENTION_DAYS', 30), // Voice SMS uploads from sms.ladill.com (via platform API). 'sms_voice_max_upload_kb' => (int) env('TRANSFER_SMS_VOICE_MAX_UPLOAD_KB', 5120), // Filesystem disk for transfer blobs (Contabo S3 in production; local `qr` for dev/tests). 'files_disk' => env('TRANSFER_FILES_DISK', 'transfer-files'), ];