'datetime', 'bird_validated_at' => 'datetime', ]; } public function organization(): BelongsTo { return $this->belongsTo(Organization::class); } public function hasValidSms(): bool { return $this->sms_status === self::STATUS_VALID && filled($this->sms_api_key_encrypted) && filled($this->sms_sender_id); } public function hasValidBird(): bool { return $this->bird_status === self::STATUS_VALID && filled($this->bird_api_key_encrypted) && filled($this->bird_from_email); } public function smsApiKey(): ?string { if (! filled($this->sms_api_key_encrypted)) { return null; } try { return Crypt::decryptString($this->sms_api_key_encrypted); } catch (\Throwable) { return null; } } public function birdApiKey(): ?string { if (! filled($this->bird_api_key_encrypted)) { return null; } try { return Crypt::decryptString($this->bird_api_key_encrypted); } catch (\Throwable) { return null; } } public static function encryptKey(string $plain): string { return Crypt::encryptString($plain); } }