memran/marwa-envelop

Transport-agnostic message envelope with fluent builder for Kafka/WebSocket/etc.

v1.0.0 2025-08-08 10:15 UTC

This package is auto-updated.

Last update: 2025-08-08 10:30:37 UTC


README

Latest Version on Packagist Downloads License

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