infocyph / talkingbytes
Transport-agnostic communication toolkit for PHP.
0.1.1
2026-07-10 15:40 UTC
Requires
- php: >=8.4
- ext-curl: *
- ext-fileinfo: *
- ext-openssl: *
Requires (Dev)
- infocyph/phpforge: dev-main
Suggests
- ext-grpc: Required for native gRPC transport.
- ext-iconv: Optional fallback for inbound charset conversion when mbstring is unavailable.
- ext-imap: Optional for imap_* address parsing and UTF7-IMAP fallback helpers.
- ext-mbstring: Recommended for robust charset conversion and encoded header handling.
- grpc/grpc: Required for generated PHP gRPC clients.
This package is auto-updated.
Last update: 2026-07-10 15:58:02 UTC
README
Transport-agnostic communication toolkit for PHP.
TalkingBytes provides a shared middleware/event core with protocol modules for:
- Email (SMTP/sendmail/mail/spool + IMAP/POP3/parser)
- HTTP (cURL + cURL multi)
- Webhook (sign/verify/replay)
- gRPC (adapter + retry + fake caller)
Install
composer require infocyph/talkingbytes
Requirements:
- PHP
>=8.4 ext-curlext-fileinfoext-openssl
Quick Start
HTTP
use Infocyph\TalkingBytes\Http\HttpClient; $result = HttpClient::curl() ->withBearerToken($token) ->timeout(10) ->postJson('https://api.example.com/orders', [ 'order_id' => 1001, 'amount' => 500, ]); if ($result->successful) { $data = $result->response->json(); }
use Infocyph\TalkingBytes\Email\Email; use Infocyph\TalkingBytes\Email\EmailMessage; $result = Email::sender()->usingNull()->send( EmailMessage::new() ->from('sender@example.com') ->to('user@example.com') ->subject('Hello') ->text('Hello from TalkingBytes') );
Webhook
use Infocyph\TalkingBytes\Webhook\Webhook; use Infocyph\TalkingBytes\Webhook\WebhookMessage; $delivery = Webhook::sender($httpClient) ->withSecret('whsec_test') ->send( WebhookMessage::event('order.created') ->url('https://merchant.example.com/webhook') ->payload(['order_id' => 1001]) );
gRPC
use Infocyph\TalkingBytes\Grpc\GrpcClient; use Infocyph\TalkingBytes\Grpc\Receiver\GrpcInboundRequest; use Infocyph\TalkingBytes\Grpc\Receiver\GrpcInboundResponse; use Infocyph\TalkingBytes\Grpc\Sender\GrpcRequest; use Infocyph\TalkingBytes\Grpc\Sender\GrpcResponse; use Infocyph\TalkingBytes\Grpc\GrpcServer; use Infocyph\TalkingBytes\Grpc\GrpcStatus; $client = GrpcClient::using( static fn (GrpcRequest $request): GrpcResponse => new GrpcResponse(GrpcStatus::Ok, ['ok' => true, 'echo' => $request->message]), ); $result = $client->send(new GrpcRequest('/orders.v1.OrderService/Create', [ 'order_id' => 1001, ])); $server = GrpcServer::new()->withHandler( '/orders.v1.OrderService/Create', static fn (GrpcInboundRequest $request): GrpcInboundResponse => GrpcInboundResponse::ok(['received' => $request->message]), );
Full Documentation
Detailed docs are in docs/ (Read the Docs structure):
docs/getting-started.rstdocs/architecture.rstdocs/email/index.rstdocs/http/index.rstdocs/webhook/index.rstdocs/grpc/index.rstdocs/grpc/quickstart.rst(Node A -> Node B microservice example)docs/grpc/inbound-outbound.rst(inbound + outbound gRPC)docs/webhook/end-to-end.rst(full sender/verifier/receiver flow)docs/events.rstdocs/testing.rstdocs/security.rstdocs/performance.rstdocs/extensions.rstdocs/naming.rstdocs/release-checklist.rst
Quality Gates
Run full quality and test pipeline:
composer ic:ci
License
MIT