$payload * @return array|null */ public function upsertEvent(array $payload): ?array { if (! $this->isConfigured()) { return null; } try { $response = Http::withToken((string) config('mail_calendar.api_key')) ->acceptJson() ->asJson() ->connectTimeout(10) ->timeout(15) ->post($this->baseUrl().'/calendar/events', $payload); } catch (ConnectionException $e) { Log::warning('Events mail calendar upsert failed', ['error' => $e->getMessage()]); return null; } if (! $response->successful()) { Log::warning('Events mail calendar upsert failed', [ 'status' => $response->status(), 'body' => $response->body(), ]); return null; } $data = $response->json('data'); return is_array($data) ? $data : null; } public function deleteEvent(int $eventId, string $mailboxEmail, string $externalRef): bool { if (! $this->isConfigured()) { return false; } try { $response = Http::withToken((string) config('mail_calendar.api_key')) ->acceptJson() ->connectTimeout(10) ->timeout(15) ->delete($this->baseUrl().'/calendar/events/'.$eventId, [ 'mailbox_email' => strtolower(trim($mailboxEmail)), 'external_ref' => $externalRef, ]); } catch (ConnectionException $e) { Log::warning('Events mail calendar delete failed', ['error' => $e->getMessage()]); return false; } return $response->successful(); } protected function baseUrl(): string { return rtrim((string) config('mail_calendar.api_url'), '/'); } }