getAttribute('provider')) { 'mock' => new Mock($user, $secret), // used for tests 'twilio' => new Twilio($user, $secret), 'text-magic' => new TextMagic($user, $secret), 'telesign' => new Telesign($user, $secret), 'msg91' => new Msg91($user, $secret), 'vonage' => new Vonage($user, $secret), default => null }; } } function push($record): ?PushAdapter { return match ($record->getAttribute('provider')) { 'apns' => new APNS($user, $secret), 'fcm' => new FCM($user, $secret), default => null }; } function email(): ?EmailAdapter { return match ($record->getAttribute('provider')) { 'mailgun' => new Mailgun($user, $secret), 'sendgrid' => new SendGrid($user, $secret), default => null }; } public function init(): void { } public function run(): void { $providerId = $this->args['providerId']; $providerRecord = $this ->getConsoleDB() ->getCollection('providers') ->getDocument($providerId); $provider = match ($providerRecord->getAttribute('type')) {//stubbbbbbed. 'sms' => $this->sms($providerRecord), 'push' => $this->push($providerRecord), 'email' => $this->email($providerRecord), default => null }; // Query for the provider // switch on provider name // call function passing needed credentials returns required provider. $messageId = $this->args['messageId']; $message = $this ->getConsoleDB() ->getCollection('messages') ->getDocument($messageId); // Get message // set up message based on provider // send a message. $provider->send($message); } public function shutdown(): void { } }