mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
wip process normal mailgun webhooks
This commit is contained in:
parent
6df213956f
commit
58a7456087
@ -27,6 +27,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
|
|||||||
use Illuminate\Foundation\Bus\Dispatchable;
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Mailgun\Mailgun;
|
||||||
use Postmark\PostmarkClient;
|
use Postmark\PostmarkClient;
|
||||||
use Turbo124\Beacon\Facades\LightLogs;
|
use Turbo124\Beacon\Facades\LightLogs;
|
||||||
|
|
||||||
@ -63,7 +64,7 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
return SystemLog::query()
|
return SystemLog::query()
|
||||||
->where('company_id', $this->invitation->company_id)
|
->where('company_id', $this->invitation->company_id)
|
||||||
->where('type_id', SystemLog::TYPE_WEBHOOK_RESPONSE)
|
->where('type_id', SystemLog::TYPE_WEBHOOK_RESPONSE)
|
||||||
->whereJsonContains('log', ['MessageID' => $message_id])
|
->whereJsonContains('log', ['id' => $message_id])
|
||||||
->orderBy('id', 'desc')
|
->orderBy('id', 'desc')
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
@ -85,7 +86,7 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
{
|
{
|
||||||
MultiDB::findAndSetDbByCompanyKey($this->request['Tag']);
|
MultiDB::findAndSetDbByCompanyKey($this->request['Tag']);
|
||||||
|
|
||||||
$this->invitation = $this->discoverInvitation($this->request['MessageID']);
|
$this->invitation = $this->discoverInvitation($this->request['message']['headers']['message-id']);
|
||||||
|
|
||||||
if (!$this->invitation) {
|
if (!$this->invitation) {
|
||||||
return;
|
return;
|
||||||
@ -95,11 +96,12 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
$this->invitation->email_error = $this->request['Details'];
|
$this->invitation->email_error = $this->request['Details'];
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($this->request['RecordType']) {
|
switch ($this->request['event'] ?? $this->request['severity']) {
|
||||||
case 'delivered':
|
case 'delivered':
|
||||||
return $this->processDelivery();
|
return $this->processDelivery();
|
||||||
case 'permanent_fail':
|
case 'failed':
|
||||||
case 'temporary_fail':
|
case 'permanent':
|
||||||
|
case 'temporary':
|
||||||
return $this->processBounce();
|
return $this->processBounce();
|
||||||
case 'complained':
|
case 'complained':
|
||||||
return $this->processSpamComplaint();
|
return $this->processSpamComplaint();
|
||||||
@ -112,40 +114,33 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
}
|
}
|
||||||
|
|
||||||
// {
|
// {
|
||||||
// "Metadata": {
|
// "event": "opened",
|
||||||
// "example": "value",
|
// "id": "-laxIqj9QWubsjY_3pTq_g",
|
||||||
// "example_2": "value"
|
// "timestamp": 1377047343.042277,
|
||||||
|
// "log-level": "info",
|
||||||
|
// "recipient": "recipient@example.com",
|
||||||
|
// "geolocation": {
|
||||||
|
// "country": "US",
|
||||||
|
// "region": "Texas",
|
||||||
|
// "city": "Austin"
|
||||||
// },
|
// },
|
||||||
// "RecordType": "Open",
|
// "tags": [],
|
||||||
// "FirstOpen": true,
|
// "campaigns": [],
|
||||||
// "Client": {
|
// "user-variables": {},
|
||||||
// "Name": "Chrome 35.0.1916.153",
|
// "ip": "111.111.111.111",
|
||||||
// "Company": "Google",
|
// "client-info": {
|
||||||
// "Family": "Chrome"
|
// "client-type": "mobile browser",
|
||||||
|
// "client-os": "iOS",
|
||||||
|
// "device-type": "mobile",
|
||||||
|
// "client-name": "Mobile Safari",
|
||||||
|
// "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B143",
|
||||||
|
// "bot": ""
|
||||||
// },
|
// },
|
||||||
// "OS": {
|
// "message": {
|
||||||
// "Name": "OS X 10.7 Lion",
|
// "headers": {
|
||||||
// "Company": "Apple Computer, Inc.",
|
// "message-id": "20130821005614.19826.35976@samples.mailgun.org"
|
||||||
// "Family": "OS X 10"
|
// }
|
||||||
// },
|
// },
|
||||||
// "Platform": "WebMail",
|
|
||||||
// "UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36",
|
|
||||||
// "ReadSeconds": 5,
|
|
||||||
// "Geo": {
|
|
||||||
// "CountryISOCode": "RS",
|
|
||||||
// "Country": "Serbia",
|
|
||||||
// "RegionISOCode": "VO",
|
|
||||||
// "Region": "Autonomna Pokrajina Vojvodina",
|
|
||||||
// "City": "Novi Sad",
|
|
||||||
// "Zip": "21000",
|
|
||||||
// "Coords": "45.2517,19.8369",
|
|
||||||
// "IP": "188.2.95.4"
|
|
||||||
// },
|
|
||||||
// "MessageID": "00000000-0000-0000-0000-000000000000",
|
|
||||||
// "MessageStream": "outbound",
|
|
||||||
// "ReceivedAt": "2022-02-06T06:37:48Z",
|
|
||||||
// "Tag": "welcome-email",
|
|
||||||
// "Recipient": "john@example.com"
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
private function processOpen()
|
private function processOpen()
|
||||||
@ -155,7 +150,7 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
|
|
||||||
$data = array_merge($this->request, ['history' => $this->fetchMessage()]);
|
$data = array_merge($this->request, ['history' => $this->fetchMessage()]);
|
||||||
|
|
||||||
$sl = $this->getSystemLog($this->request['MessageID']);
|
$sl = $this->getSystemLog($this->request['message']['headers']['message-id']);
|
||||||
|
|
||||||
if ($sl) {
|
if ($sl) {
|
||||||
$this->updateSystemLog($sl, $data);
|
$this->updateSystemLog($sl, $data);
|
||||||
@ -173,18 +168,54 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
}
|
}
|
||||||
|
|
||||||
// {
|
// {
|
||||||
// "RecordType": "Delivery",
|
// "event": "delivered",
|
||||||
// "ServerID": 23,
|
// "id": "hK7mQVt1QtqRiOfQXta4sw",
|
||||||
// "MessageStream": "outbound",
|
// "timestamp": 1529692199.626182,
|
||||||
// "MessageID": "00000000-0000-0000-0000-000000000000",
|
// "log-level": "info",
|
||||||
// "Recipient": "john@example.com",
|
// "envelope": {
|
||||||
// "Tag": "welcome-email",
|
// "transport": "smtp",
|
||||||
// "DeliveredAt": "2021-02-21T16:34:52Z",
|
// "sender": "sender@example.org",
|
||||||
// "Details": "Test delivery webhook details",
|
// "sending-ip": "123.123.123.123",
|
||||||
// "Metadata": {
|
// "targets": "john@example.com"
|
||||||
// "example": "value",
|
// },
|
||||||
// "example_2": "value"
|
// "flags": {
|
||||||
// }
|
// "is-routed": false,
|
||||||
|
// "is-authenticated": false,
|
||||||
|
// "is-system-test": false,
|
||||||
|
// "is-test-mode": false
|
||||||
|
// },
|
||||||
|
// "delivery-status": {
|
||||||
|
// "tls": true,
|
||||||
|
// "mx-host": "aspmx.l.example.com",
|
||||||
|
// "code": 250,
|
||||||
|
// "description": "",
|
||||||
|
// "session-seconds": 0.4367079734802246,
|
||||||
|
// "utf8": true,
|
||||||
|
// "attempt-no": 1,
|
||||||
|
// "message": "OK",
|
||||||
|
// "certificate-verified": true
|
||||||
|
// },
|
||||||
|
// "message": {
|
||||||
|
// "headers": {
|
||||||
|
// "to": "team@example.org",
|
||||||
|
// "message-id": "20180622182958.1.48906CB188F1A454@exmple.org",
|
||||||
|
// "from": "sender@exmple.org",
|
||||||
|
// "subject": "Test Subject"
|
||||||
|
// },
|
||||||
|
// "attachments": [],
|
||||||
|
// "size": 586
|
||||||
|
// },
|
||||||
|
// "storage": {
|
||||||
|
// "url": "https://storage-us-west1.api.mailgun.net/v3/domains/...",
|
||||||
|
// "region": "us-west1",
|
||||||
|
// "key": "AwABB...",
|
||||||
|
// "env": "production"
|
||||||
|
// },
|
||||||
|
// "recipient": "john@example.com",
|
||||||
|
// "recipient-domain": "example.com",
|
||||||
|
// "campaigns": [],
|
||||||
|
// "tags": [],
|
||||||
|
// "user-variables": {}
|
||||||
// }
|
// }
|
||||||
private function processDelivery()
|
private function processDelivery()
|
||||||
{
|
{
|
||||||
@ -193,7 +224,7 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
|
|
||||||
$data = array_merge($this->request, ['history' => $this->fetchMessage()]);
|
$data = array_merge($this->request, ['history' => $this->fetchMessage()]);
|
||||||
|
|
||||||
$sl = $this->getSystemLog($this->request['MessageID']);
|
$sl = $this->getSystemLog($this->request['message']['headers']['message-id']);
|
||||||
|
|
||||||
if ($sl) {
|
if ($sl) {
|
||||||
$this->updateSystemLog($sl, $data);
|
$this->updateSystemLog($sl, $data);
|
||||||
@ -211,47 +242,66 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
}
|
}
|
||||||
|
|
||||||
// {
|
// {
|
||||||
// "Metadata": {
|
// "event": "failed", || "temporary" || "permanent"
|
||||||
// "example": "value",
|
// "id": "pl271FzxTTmGRW8Uj3dUWw",
|
||||||
// "example_2": "value"
|
// "timestamp": 1529701969.818328,
|
||||||
|
// "log-level": "error",
|
||||||
|
// "severity": "permanent",
|
||||||
|
// "reason": "suppress-bounce",
|
||||||
|
// "envelope": {
|
||||||
|
// "sender": "john@example.org",
|
||||||
|
// "transport": "smtp",
|
||||||
|
// "targets": "joan@example.com"
|
||||||
// },
|
// },
|
||||||
// "RecordType": "Bounce",
|
// "flags": {
|
||||||
// "ID": 42,
|
// "is-routed": false,
|
||||||
// "Type": "HardBounce",
|
// "is-authenticated": true,
|
||||||
// "TypeCode": 1,
|
// "is-system-test": false,
|
||||||
// "Name": "Hard bounce",
|
// "is-test-mode": false
|
||||||
// "Tag": "Test",
|
// },
|
||||||
// "MessageID": "00000000-0000-0000-0000-000000000000",
|
// "delivery-status": {
|
||||||
// "ServerID": 1234,
|
// "attempt-no": 1,
|
||||||
// "MessageStream": "outbound",
|
// "message": "",
|
||||||
// "Description": "The server was unable to deliver your message (ex: unknown user, mailbox not found).",
|
// "code": 605,
|
||||||
// "Details": "Test bounce details",
|
// "description": "Not delivering to previously bounced address",
|
||||||
// "Email": "john@example.com",
|
// "session-seconds": 0.0
|
||||||
// "From": "sender@example.com",
|
// },
|
||||||
// "BouncedAt": "2021-02-21T16:34:52Z",
|
// "message": {
|
||||||
// "DumpAvailable": true,
|
// "headers": {
|
||||||
// "Inactive": true,
|
// "to": "joan@example.com",
|
||||||
// "CanActivate": true,
|
// "message-id": "20180622211249.1.2A6098970A380E12@example.org",
|
||||||
// "Subject": "Test subject",
|
// "from": "john@example.org",
|
||||||
// "Content": "Test content"
|
// "subject": "Test Subject"
|
||||||
|
// },
|
||||||
|
// "attachments": [],
|
||||||
|
// "size": 867
|
||||||
|
// },
|
||||||
|
// "storage": {
|
||||||
|
// "url": "https://se.api.mailgun.net/v3/domains/example.org/messages/eyJwI...",
|
||||||
|
// "key": "eyJwI..."
|
||||||
|
// },
|
||||||
|
// "recipient": "slava@mailgun.com",
|
||||||
|
// "recipient-domain": "mailgun.com",
|
||||||
|
// "campaigns": [],
|
||||||
|
// "tags": [],
|
||||||
|
// "user-variables": {}
|
||||||
// }
|
// }
|
||||||
|
|
||||||
private function processBounce()
|
private function processBounce()
|
||||||
{
|
{
|
||||||
$this->invitation->email_status = 'bounced';
|
$this->invitation->email_status = 'bounced';
|
||||||
$this->invitation->save();
|
$this->invitation->save();
|
||||||
|
|
||||||
$bounce = new EmailBounce(
|
$bounce = new EmailBounce(
|
||||||
$this->request['Tag'],
|
$this->request['tags']->implode(','),
|
||||||
$this->request['From'],
|
$this->request['message']['headers']['from'],
|
||||||
$this->request['MessageID']
|
$this->request['message']['headers']['message-id']
|
||||||
);
|
);
|
||||||
|
|
||||||
LightLogs::create($bounce)->send();
|
LightLogs::create($bounce)->send();
|
||||||
|
|
||||||
$data = array_merge($this->request, ['history' => $this->fetchMessage()]);
|
$data = array_merge($this->request, ['history' => $this->fetchMessage()]);
|
||||||
|
|
||||||
$sl = $this->getSystemLog($this->request['MessageID']);
|
$sl = $this->getSystemLog($this->request['message']['headers']['message-id']);
|
||||||
|
|
||||||
if ($sl) {
|
if ($sl) {
|
||||||
$this->updateSystemLog($sl, $data);
|
$this->updateSystemLog($sl, $data);
|
||||||
@ -265,29 +315,33 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
}
|
}
|
||||||
|
|
||||||
// {
|
// {
|
||||||
// "Metadata": {
|
// "event": "opened",
|
||||||
// "example": "value",
|
// "id": "-laxIqj9QWubsjY_3pTq_g",
|
||||||
// "example_2": "value"
|
// "timestamp": 1377047343.042277,
|
||||||
|
// "log-level": "info",
|
||||||
|
// "recipient": "recipient@example.com",
|
||||||
|
// "geolocation": {
|
||||||
|
// "country": "US",
|
||||||
|
// "region": "Texas",
|
||||||
|
// "city": "Austin"
|
||||||
|
// },
|
||||||
|
// "tags": [],
|
||||||
|
// "campaigns": [],
|
||||||
|
// "user-variables": {},
|
||||||
|
// "ip": "111.111.111.111",
|
||||||
|
// "client-info": {
|
||||||
|
// "client-type": "mobile browser",
|
||||||
|
// "client-os": "iOS",
|
||||||
|
// "device-type": "mobile",
|
||||||
|
// "client-name": "Mobile Safari",
|
||||||
|
// "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B143",
|
||||||
|
// "bot": ""
|
||||||
|
// },
|
||||||
|
// "message": {
|
||||||
|
// "headers": {
|
||||||
|
// "message-id": "20130821005614.19826.35976@samples.mailgun.org"
|
||||||
|
// }
|
||||||
// },
|
// },
|
||||||
// "RecordType": "SpamComplaint",
|
|
||||||
// "ID": 42,
|
|
||||||
// "Type": "SpamComplaint",
|
|
||||||
// "TypeCode": 100001,
|
|
||||||
// "Name": "Spam complaint",
|
|
||||||
// "Tag": "Test",
|
|
||||||
// "MessageID": "00000000-0000-0000-0000-000000000000",
|
|
||||||
// "ServerID": 1234,
|
|
||||||
// "MessageStream": "outbound",
|
|
||||||
// "Description": "The subscriber explicitly marked this message as spam.",
|
|
||||||
// "Details": "Test spam complaint details",
|
|
||||||
// "Email": "john@example.com",
|
|
||||||
// "From": "sender@example.com",
|
|
||||||
// "BouncedAt": "2021-02-21T16:34:52Z",
|
|
||||||
// "DumpAvailable": true,
|
|
||||||
// "Inactive": true,
|
|
||||||
// "CanActivate": false,
|
|
||||||
// "Subject": "Test subject",
|
|
||||||
// "Content": "Test content"
|
|
||||||
// }
|
// }
|
||||||
private function processSpamComplaint()
|
private function processSpamComplaint()
|
||||||
{
|
{
|
||||||
@ -295,16 +349,16 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
$this->invitation->save();
|
$this->invitation->save();
|
||||||
|
|
||||||
$spam = new EmailSpam(
|
$spam = new EmailSpam(
|
||||||
$this->request['Tag'],
|
$this->request['tags'],
|
||||||
$this->request['From'],
|
$this->request['From'],
|
||||||
$this->request['MessageID']
|
$this->request['message']['headers']['message-id']
|
||||||
);
|
);
|
||||||
|
|
||||||
LightLogs::create($spam)->send();
|
LightLogs::create($spam)->send();
|
||||||
|
|
||||||
$data = array_merge($this->request, ['history' => $this->fetchMessage()]);
|
$data = array_merge($this->request, ['history' => $this->fetchMessage()]);
|
||||||
|
|
||||||
$sl = $this->getSystemLog($this->request['MessageID']);
|
$sl = $this->getSystemLog($this->request['message']['headers']['message-id']);
|
||||||
|
|
||||||
if ($sl) {
|
if ($sl) {
|
||||||
$this->updateSystemLog($sl, $data);
|
$this->updateSystemLog($sl, $data);
|
||||||
@ -370,28 +424,30 @@ class ProcessMailgunWebhook implements ShouldQueue
|
|||||||
|
|
||||||
private function fetchMessage(): array
|
private function fetchMessage(): array
|
||||||
{
|
{
|
||||||
if (strlen($this->request['MessageID']) < 1) {
|
if (strlen($this->request['message']['headers']['message-id']) < 1) {
|
||||||
return $this->default_response;
|
return $this->default_response;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$postmark = new PostmarkClient(config('services.postmark.token'));
|
$mailgun = new Mailgun(config('services.mailgun.token'), config('services.mailgun.endpoint'));
|
||||||
$messageDetail = $postmark->getOutboundMessageDetails($this->request['MessageID']);
|
$messageDetail = $mailgun->messages()->show($this->request['message']['headers']['message-id']);
|
||||||
|
|
||||||
$recipients = collect($messageDetail['recipients'])->flatten()->implode(',');
|
$recipients = collect($messageDetail->getRecipients())->flatten()->implode(',');
|
||||||
$subject = $messageDetail->subject ?? '';
|
$subject = $messageDetail->getSubject() ?? '';
|
||||||
|
|
||||||
$events = collect($messageDetail->messageevents)->map(function ($event) {
|
$events = collect($mailgun->events()->get(config('services.mailgun.domain'), [
|
||||||
|
"message-id" => $this->request['message']['headers']['message-id'],
|
||||||
|
])->getItems())->map(function ($event) {
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'bounce_id' => $event?->Details?->BounceID ?? '',
|
'bounce_id' => array_key_exists("id", $event) ? $event["id"] : '',
|
||||||
'recipient' => $event->Recipient ?? '',
|
'recipient' => array_key_exists("recipient", $event) ? $event["recipient"] : '',
|
||||||
'status' => $event->Type ?? '',
|
'status' => array_key_exists("delivery-status", $event) && array_key_exists("code", $event["delivery-status"]) ? $event["delivery-status"]["code"] : '',
|
||||||
'delivery_message' => $event->Details->DeliveryMessage ?? $event->Details->Summary ?? '',
|
'delivery_message' => array_key_exists("delivery-status", $event) && array_key_exists("message", $event["delivery-status"]) ? $event["delivery-status"]["message"] : (array_key_exists("delivery-status", $event) && array_key_exists("description", $event["delivery-status"]) ? $event["delivery-status"]["description"] : ''),
|
||||||
'server' => $event->Details->DestinationServer ?? '',
|
'server' => array_key_exists("delivery-status", $event) && array_key_exists("mx-host", $event["delivery-status"]) ? $event["delivery-status"]["mx-host"] : '',
|
||||||
'server_ip' => $event->Details->DestinationIP ?? '',
|
'server_ip' => array_key_exists("ip", $event) ? $event["ip"] : '',
|
||||||
'date' => \Carbon\Carbon::parse($event->ReceivedAt)->format('Y-m-d H:i:s') ?? '',
|
'date' => \Carbon\Carbon::parse($event["timestamp"])->format('Y-m-d H:i:s') ?? '',
|
||||||
];
|
];
|
||||||
|
|
||||||
})->toArray();
|
})->toArray();
|
||||||
|
@ -70,10 +70,12 @@
|
|||||||
"league/fractal": "^0.20.0",
|
"league/fractal": "^0.20.0",
|
||||||
"league/omnipay": "^3.1",
|
"league/omnipay": "^3.1",
|
||||||
"livewire/livewire": "^2.10",
|
"livewire/livewire": "^2.10",
|
||||||
|
"mailgun/mailgun-php": "^3.6",
|
||||||
"microsoft/microsoft-graph": "^1.69",
|
"microsoft/microsoft-graph": "^1.69",
|
||||||
"mollie/mollie-api-php": "^2.36",
|
"mollie/mollie-api-php": "^2.36",
|
||||||
"nelexa/zip": "^4.0",
|
"nelexa/zip": "^4.0",
|
||||||
"nwidart/laravel-modules": "^10.0",
|
"nwidart/laravel-modules": "^10.0",
|
||||||
|
"nyholm/psr7": "^1.8",
|
||||||
"omnipay/paypal": "^3.0",
|
"omnipay/paypal": "^3.0",
|
||||||
"payfast/payfast-php-sdk": "^1.1",
|
"payfast/payfast-php-sdk": "^1.1",
|
||||||
"phpoffice/phpspreadsheet": "^1.29",
|
"phpoffice/phpspreadsheet": "^1.29",
|
||||||
@ -92,7 +94,7 @@
|
|||||||
"sprain/swiss-qr-bill": "^4.3",
|
"sprain/swiss-qr-bill": "^4.3",
|
||||||
"square/square": "30.0.0.*",
|
"square/square": "30.0.0.*",
|
||||||
"stripe/stripe-php": "^12",
|
"stripe/stripe-php": "^12",
|
||||||
"symfony/http-client": "^6.0",
|
"symfony/http-client": "^7.0",
|
||||||
"symfony/mailgun-mailer": "^6.1",
|
"symfony/mailgun-mailer": "^6.1",
|
||||||
"symfony/postmark-mailer": "^6.1",
|
"symfony/postmark-mailer": "^6.1",
|
||||||
"turbo124/beacon": "^1.5",
|
"turbo124/beacon": "^1.5",
|
||||||
|
146
composer.lock
generated
146
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "ef5c36f71295ade916c3b7084642f0b4",
|
"content-hash": "a1427d5a8467c0c3dffac544c6da5f65",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "afosto/yaac",
|
"name": "afosto/yaac",
|
||||||
@ -6071,6 +6071,67 @@
|
|||||||
],
|
],
|
||||||
"time": "2023-06-21T14:59:35+00:00"
|
"time": "2023-06-21T14:59:35+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "mailgun/mailgun-php",
|
||||||
|
"version": "v3.6.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/mailgun/mailgun-php.git",
|
||||||
|
"reference": "3dbdc2f220fa64e78e903477efa22858c72509be"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/mailgun/mailgun-php/zipball/3dbdc2f220fa64e78e903477efa22858c72509be",
|
||||||
|
"reference": "3dbdc2f220fa64e78e903477efa22858c72509be",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.3 || ^8.0",
|
||||||
|
"php-http/client-common": "^2.2.1",
|
||||||
|
"php-http/discovery": "^1.19",
|
||||||
|
"php-http/multipart-stream-builder": "^1.1.2",
|
||||||
|
"psr/http-client": "^1.0",
|
||||||
|
"webmozart/assert": "^1.9.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"nyholm/nsa": "^1.2.1",
|
||||||
|
"nyholm/psr7": "^1.3.1",
|
||||||
|
"phpunit/phpunit": "^9.3",
|
||||||
|
"squizlabs/php_codesniffer": "^3.7",
|
||||||
|
"symfony/http-client": "^5.4 || ^6.3"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"nyholm/psr7": "PSR-7 message implementation",
|
||||||
|
"symfony/http-client": "HTTP client"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.0-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Mailgun\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Travis Swientek",
|
||||||
|
"email": "travis@mailgunhq.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "The Mailgun SDK provides methods for all API functions.",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/mailgun/mailgun-php/issues",
|
||||||
|
"source": "https://github.com/mailgun/mailgun-php/tree/v3.6.3"
|
||||||
|
},
|
||||||
|
"time": "2023-12-01T10:04:01+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "markbaker/complex",
|
"name": "markbaker/complex",
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
@ -8012,6 +8073,62 @@
|
|||||||
"abandoned": "psr/http-factory",
|
"abandoned": "psr/http-factory",
|
||||||
"time": "2023-04-14T14:16:17+00:00"
|
"time": "2023-04-14T14:16:17+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/multipart-stream-builder",
|
||||||
|
"version": "1.3.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/multipart-stream-builder.git",
|
||||||
|
"reference": "f5938fd135d9fa442cc297dc98481805acfe2b6a"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/f5938fd135d9fa442cc297dc98481805acfe2b6a",
|
||||||
|
"reference": "f5938fd135d9fa442cc297dc98481805acfe2b6a",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1 || ^8.0",
|
||||||
|
"php-http/discovery": "^1.15",
|
||||||
|
"psr/http-factory-implementation": "^1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"nyholm/psr7": "^1.0",
|
||||||
|
"php-http/message": "^1.5",
|
||||||
|
"php-http/message-factory": "^1.0.2",
|
||||||
|
"phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Message\\MultipartStream\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Tobias Nyholm",
|
||||||
|
"email": "tobias.nyholm@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A builder class that help you create a multipart stream",
|
||||||
|
"homepage": "http://php-http.org",
|
||||||
|
"keywords": [
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"multipart stream",
|
||||||
|
"stream"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/multipart-stream-builder/issues",
|
||||||
|
"source": "https://github.com/php-http/multipart-stream-builder/tree/1.3.0"
|
||||||
|
},
|
||||||
|
"time": "2023-04-28T14:10:22+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "php-http/promise",
|
"name": "php-http/promise",
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
@ -11378,28 +11495,27 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/http-client",
|
"name": "symfony/http-client",
|
||||||
"version": "v6.4.0",
|
"version": "v7.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/http-client.git",
|
"url": "https://github.com/symfony/http-client.git",
|
||||||
"reference": "5c584530b77aa10ae216989ffc48b4bedc9c0b29"
|
"reference": "c3e90d09b3c45a5d47170e81a712d51c352cbc68"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/http-client/zipball/5c584530b77aa10ae216989ffc48b4bedc9c0b29",
|
"url": "https://api.github.com/repos/symfony/http-client/zipball/c3e90d09b3c45a5d47170e81a712d51c352cbc68",
|
||||||
"reference": "5c584530b77aa10ae216989ffc48b4bedc9c0b29",
|
"reference": "c3e90d09b3c45a5d47170e81a712d51c352cbc68",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=8.1",
|
"php": ">=8.2",
|
||||||
"psr/log": "^1|^2|^3",
|
"psr/log": "^1|^2|^3",
|
||||||
"symfony/deprecation-contracts": "^2.5|^3",
|
|
||||||
"symfony/http-client-contracts": "^3",
|
"symfony/http-client-contracts": "^3",
|
||||||
"symfony/service-contracts": "^2.5|^3"
|
"symfony/service-contracts": "^2.5|^3"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"php-http/discovery": "<1.15",
|
"php-http/discovery": "<1.15",
|
||||||
"symfony/http-foundation": "<6.3"
|
"symfony/http-foundation": "<6.4"
|
||||||
},
|
},
|
||||||
"provide": {
|
"provide": {
|
||||||
"php-http/async-client-implementation": "*",
|
"php-http/async-client-implementation": "*",
|
||||||
@ -11416,11 +11532,11 @@
|
|||||||
"nyholm/psr7": "^1.0",
|
"nyholm/psr7": "^1.0",
|
||||||
"php-http/httplug": "^1.0|^2.0",
|
"php-http/httplug": "^1.0|^2.0",
|
||||||
"psr/http-client": "^1.0",
|
"psr/http-client": "^1.0",
|
||||||
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
|
"symfony/dependency-injection": "^6.4|^7.0",
|
||||||
"symfony/http-kernel": "^5.4|^6.0|^7.0",
|
"symfony/http-kernel": "^6.4|^7.0",
|
||||||
"symfony/messenger": "^5.4|^6.0|^7.0",
|
"symfony/messenger": "^6.4|^7.0",
|
||||||
"symfony/process": "^5.4|^6.0|^7.0",
|
"symfony/process": "^6.4|^7.0",
|
||||||
"symfony/stopwatch": "^5.4|^6.0|^7.0"
|
"symfony/stopwatch": "^6.4|^7.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -11451,7 +11567,7 @@
|
|||||||
"http"
|
"http"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/http-client/tree/v6.4.0"
|
"source": "https://github.com/symfony/http-client/tree/v7.0.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -11467,7 +11583,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-11-28T20:55:58+00:00"
|
"time": "2023-11-29T08:40:23+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/http-client-contracts",
|
"name": "symfony/http-client-contracts",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user