Bill Meet streaming hourly and storage per GB like Transfer.
Deploy Ladill Meet / deploy (push) Successful in 54s

Wallet debits at session end, on recording/file storage, and via daily renewals with grace period before asset deletion.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-01 16:33:45 +00:00
co-authored by Cursor
parent 13a251250c
commit 59b59cb70e
18 changed files with 749 additions and 96 deletions
+7 -8
View File
@@ -10,18 +10,21 @@ class LicenseService
/** @var array<string, array<string, int>> */
public const TIERS = [
'standard' => [
'participant_minutes' => 10000,
'streaming_hours' => 100,
'recording_storage_bytes' => 5_368_709_120, // 5 GB
'file_storage_bytes' => 5_368_709_120,
'ai_minutes' => 120,
],
'professional' => [
'participant_minutes' => 50000,
'streaming_hours' => 500,
'recording_storage_bytes' => 26_843_545_600, // 25 GB
'file_storage_bytes' => 26_843_545_600,
'ai_minutes' => 600,
],
'enterprise' => [
'participant_minutes' => 500000,
'streaming_hours' => 5000,
'recording_storage_bytes' => 107_374_182_400, // 100 GB
'file_storage_bytes' => 107_374_182_400,
'ai_minutes' => 5000,
],
];
@@ -58,10 +61,6 @@ class LicenseService
public function assertCanStartSession(Organization $organization, ?int $branchId = null): void
{
abort_unless(
$this->withinQuota($organization, 'participant_minutes', 60, $branchId),
402,
'Participant-minute quota exceeded for this billing period.',
);
app(MeetBillingService::class)->assertCanStartSession($organization);
}
}