gn-synapse-client-php / examples / laravel /
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 1 day ago
..
README.md Initial client library skeleton (v0.1.0) 1 day ago
README.md

Подключение Synapse-клиента в Laravel-сервис

PSR-18 транспорт — тот, что уже есть в сервисе (в Laravel обычно Guzzle через guzzlehttp/guzzle). Таймаут берётся из конфига клиента.

app/Providers/AppServiceProvider.php:

use GNexus\Synapse\Config\SynapseConfig;
use GNexus\Synapse\SynapseClient;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\HttpFactory;

public function register(): void
{
    $this->app->singleton(SynapseConfig::class, fn () => SynapseConfig::fromGlobals());

    $this->app->singleton(SynapseClient::class, function ($app) {
        $config = $app->make(SynapseConfig::class);
        return new SynapseClient(
            $config,
            new Client(['timeout' => $config->timeoutSeconds]),
            new HttpFactory(), // RequestFactoryInterface
            new HttpFactory(), // StreamFactoryInterface
        );
    });
}

.env (значения — в vault/env сервиса, ключ печатается при выдаче один раз):

SYNAPSE_URL=http://synapse.gnexus.space:8013
SYNAPSE_API_KEY=syn_...
SYNAPSE_DEFAULT_SOURCE=gnexus-auth

Использование (в job/event listener):

$synapse = app(SynapseClient::class);
$synapse->emit(source: null, subject: 'user', action: 'password_changed',
    payload: ['user_id' => $user->uuid], dedupKey: "pw-{$user->uuid}");

emit не бросает исключения: упавший Synapse не должен ломать выход пользователя. Для критичных событий — send с try/catch SynapseException.