memran / marwa-envelop
Transport-agnostic message envelope with fluent builder for Kafka/WebSocket/etc.
v1.0.0
2025-08-08 10:15 UTC
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^10.0
README
Transport-agnostic, structured message wrapper for PHP โ ideal for Kafka, WebSocket, MQTT, log pipelines, or chat protocols.
๐ Features
- ๐ฆ PSR-compliant and lazy-loaded
- ๐ฌ Works with strings, arrays, files, and links
- ๐ Optional HMAC signing with TTL expiry
- ๐ Compress/gzip for efficient transport
- ๐ Attachments and file linking
- ๐งฑ Chainable message builder syntax
- ๐งช Ready for WebSocket, Kafka, SQS, Laravel Queue, MQTT, etc.
๐ธ Screenshot
Message structure as decoded from Envelop JSON:
{
"id": "2dd0faca-499a-42de-a274-a458b12dc1cf",
"type": "chat.message",
"sender": "user:123",
"receiver": "user:456",
"body": "Hello World!",
"headers": {
"x-room": "demo"
},
"signature": "..."
}
๐ฆ Installation
composer require memran/marwa-envelop
๐ Usage Example
โ๏ธ Build and Send Message
use Marwa\Envelop\EnvelopBuilder; $msg = EnvelopBuilder::start() ->type('chat.message') ->sender('user:123') ->receiver('user:456') ->header('x-room', 'demo') ->body('Hello world!') ->ttl(60) ->sign('super-secret-key') ->build(); // Send over Kafka, WebSocket, etc. $wire = $msg->toJson();
๐ฌ Decode and Read Message
use Marwa\Envelop\Envelop; $received = Envelop::fromJson($wire); if ($received->isExpired()) { throw new \Exception("Message expired"); } if (!$received->checkSignature('super-secret-key')) { throw new \Exception("Invalid signature"); } echo $received->body; // "Hello world!"
๐ Attach File
$msg = EnvelopBuilder::start() ->type('chat.file') ->sender('u:1') ->receiver('u:2') ->attach('/path/to/image.jpg') ->build();
๐ Link to Remote File
$msg = EnvelopBuilder::start() ->type('file.link') ->sender('u:1') ->receiver('u:2') ->link('https://example.com/my.pdf', [ 'name' => 'My Document', 'size' => '2MB' ]) ->build();
๐งฉ Ideal Use Cases
- WhatsApp-style chat systems
- Kafka or MQTT message brokers
- WebSocket messaging with TTL
- Distributed logging pipelines
- Task queues with metadata (e.g. Laravel, Symfony)
๐ Stable Releases
Version | Notes |
---|---|
v1.0.0 |
Initial stable release ๐ |
๐ License
MIT ยฉ Mohammad Emran
๐ง Keywords
- kafka
- websocket
- envelope
- message structure
- event-driven
- php builder
- logging
- transport agnostic
- HMAC
- json message
- file attachment
- laravel queue