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.