From 7066dd59d7f91c1fee664a15a395860adfb54a7e Mon Sep 17 00:00:00 2001 From: Usman Shaukat Date: Fri, 13 Oct 2023 16:10:44 +0500 Subject: [PATCH 1/8] Adding Support for AWS EventBridge for Shopify Webhooks --- src/Services/ApiHelper.php | 58 +++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 17 deletions(-) diff --git a/src/Services/ApiHelper.php b/src/Services/ApiHelper.php index 16a2db68..0d4f72ee 100644 --- a/src/Services/ApiHelper.php +++ b/src/Services/ApiHelper.php @@ -366,34 +366,58 @@ public function getWebhooks(array $params = []): ResponseAccess */ public function createWebhook(array $payload): ResponseAccess { - $query = ' - mutation webhookSubscriptionCreate( - $topic: WebhookSubscriptionTopic!, - $webhookSubscription: WebhookSubscriptionInput! - ) { - webhookSubscriptionCreate( - topic: $topic - webhookSubscription: $webhookSubscription + $addressType = str_starts_with($payload['address'], 'arn:') ? 'arn' : 'callbackUrl'; + if($addressType === 'arn'){ + $query = ' + mutation eventBridgeWebhookSubscriptionCreate( + $topic: WebhookSubscriptionTopic!, + $webhookSubscription: EventBridgeWebhookSubscriptionInput! ) { - userErrors { - field - message + eventBridgeWebhookSubscriptionCreate( + topic: $topic, + webhookSubscription: $webhookSubscription + ) { + userErrors { + field + message + } + webhookSubscription { + id + topic + } } - webhookSubscription { - id - topic + } + '; + } + else{ + $query = ' + mutation webhookSubscriptionCreate( + $topic: WebhookSubscriptionTopic!, + $webhookSubscription: WebhookSubscriptionInput! + ) { + webhookSubscriptionCreate( + topic: $topic + webhookSubscription: $webhookSubscription + ) { + userErrors { + field + message + } + webhookSubscription { + id + topic + } } } + '; } - '; - // Change REST-format topics ("resource/event") // to GraphQL-format topics ("RESOURCE_EVENT"), for pre-v17 compatibility $topic = Util::getGraphQLWebhookTopic($payload['topic']); $variables = [ 'topic' => $topic, 'webhookSubscription' => [ - 'callbackUrl' => $payload['address'], + $addressType => $payload['address'], 'format' => 'JSON', ], ]; From 2ae28fa357018499437e733c6c8bb78851d2bb55 Mon Sep 17 00:00:00 2001 From: Usman Shaukat Date: Fri, 13 Oct 2023 16:14:19 +0500 Subject: [PATCH 2/8] Adding Support for AWS EventBridge for Shopify Webhooks --- src/Services/ApiHelper.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Services/ApiHelper.php b/src/Services/ApiHelper.php index 0d4f72ee..0d2822a0 100644 --- a/src/Services/ApiHelper.php +++ b/src/Services/ApiHelper.php @@ -367,8 +367,8 @@ public function getWebhooks(array $params = []): ResponseAccess public function createWebhook(array $payload): ResponseAccess { $addressType = str_starts_with($payload['address'], 'arn:') ? 'arn' : 'callbackUrl'; - if($addressType === 'arn'){ - $query = ' + if($addressType === 'arn') { + $query = ' mutation eventBridgeWebhookSubscriptionCreate( $topic: WebhookSubscriptionTopic!, $webhookSubscription: EventBridgeWebhookSubscriptionInput! @@ -388,8 +388,7 @@ public function createWebhook(array $payload): ResponseAccess } } '; - } - else{ + } else { $query = ' mutation webhookSubscriptionCreate( $topic: WebhookSubscriptionTopic!, From 8f60dc826be6353c8f2a821d1736cae6d7a53079 Mon Sep 17 00:00:00 2001 From: Usman Shaukat Date: Fri, 13 Oct 2023 16:15:35 +0500 Subject: [PATCH 3/8] Adding Support for AWS EventBridge for Shopify Webhooks --- src/Services/ApiHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/ApiHelper.php b/src/Services/ApiHelper.php index 0d2822a0..3341240d 100644 --- a/src/Services/ApiHelper.php +++ b/src/Services/ApiHelper.php @@ -367,7 +367,7 @@ public function getWebhooks(array $params = []): ResponseAccess public function createWebhook(array $payload): ResponseAccess { $addressType = str_starts_with($payload['address'], 'arn:') ? 'arn' : 'callbackUrl'; - if($addressType === 'arn') { + if ($addressType === 'arn') { $query = ' mutation eventBridgeWebhookSubscriptionCreate( $topic: WebhookSubscriptionTopic!, From b67f4c181f3fc9290f0cbbb15e543ddc9364a788 Mon Sep 17 00:00:00 2001 From: Usman Shaukat Date: Fri, 13 Oct 2023 16:25:55 +0500 Subject: [PATCH 4/8] Adding Support for AWS EventBridge for Shopify Webhooks --- tests/Services/ApiHelperTest.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/Services/ApiHelperTest.php b/tests/Services/ApiHelperTest.php index 1257f189..ade19114 100644 --- a/tests/Services/ApiHelperTest.php +++ b/tests/Services/ApiHelperTest.php @@ -205,6 +205,13 @@ public function testCreateWebhook(): void ]); $this->assertInstanceOf(ResponseAccess::class, $data); $this->assertSame('ORDERS_CREATE', $data['data']['webhookSubscriptionCreate']['topic']); + + $data = $shop->apiHelper()->createWebhook([ + 'topic' => 'ORDERS_CREATE', + 'address' => 'arn:aws:events:us-east-1::event-source/aws.partner/shopify.com/client_id_x/EventBridgeSource', + ]); + $this->assertInstanceOf(ResponseAccess::class, $data); + $this->assertSame('ORDERS_CREATE', $data['data']['webhookSubscriptionCreate']['topic']); } public function testDeleteWebhook(): void From 817d723b53d5f2cee4c81e3592b340db2f1cc888 Mon Sep 17 00:00:00 2001 From: Usman Shaukat Date: Fri, 13 Oct 2023 16:28:51 +0500 Subject: [PATCH 5/8] Adding Support for AWS EventBridge for Shopify Webhooks --- tests/Services/ApiHelperTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Services/ApiHelperTest.php b/tests/Services/ApiHelperTest.php index ade19114..68362416 100644 --- a/tests/Services/ApiHelperTest.php +++ b/tests/Services/ApiHelperTest.php @@ -206,7 +206,7 @@ public function testCreateWebhook(): void $this->assertInstanceOf(ResponseAccess::class, $data); $this->assertSame('ORDERS_CREATE', $data['data']['webhookSubscriptionCreate']['topic']); - $data = $shop->apiHelper()->createWebhook([ + $data = $shop->apiHelper()->createWebhook([ 'topic' => 'ORDERS_CREATE', 'address' => 'arn:aws:events:us-east-1::event-source/aws.partner/shopify.com/client_id_x/EventBridgeSource', ]); From fd0da4638ab7f67bc8e81eb6125b25d2d3e44084 Mon Sep 17 00:00:00 2001 From: Usman Shaukat Date: Fri, 13 Oct 2023 16:35:24 +0500 Subject: [PATCH 6/8] Adding Support for AWS EventBridge for Shopify Webhooks --- tests/Services/ApiHelperTest.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/Services/ApiHelperTest.php b/tests/Services/ApiHelperTest.php index 68362416..ddef531b 100644 --- a/tests/Services/ApiHelperTest.php +++ b/tests/Services/ApiHelperTest.php @@ -202,16 +202,18 @@ public function testCreateWebhook(): void $data = $shop->apiHelper()->createWebhook([ 'topic' => 'ORDERS_CREATE', 'address' => 'https://localhost/webhook/orders-create', - ]); - $this->assertInstanceOf(ResponseAccess::class, $data); - $this->assertSame('ORDERS_CREATE', $data['data']['webhookSubscriptionCreate']['topic']); + ]); - $data = $shop->apiHelper()->createWebhook([ - 'topic' => 'ORDERS_CREATE', + $dataArn = $shop->apiHelper()->createWebhook([ + 'topic' => 'ORDERS_UPDATE', 'address' => 'arn:aws:events:us-east-1::event-source/aws.partner/shopify.com/client_id_x/EventBridgeSource', ]); + $this->assertInstanceOf(ResponseAccess::class, $dataArn); + $this->assertInstanceOf(ResponseAccess::class, $data); + $this->assertInstanceOf(ResponseAccess::class, $dataArn); $this->assertSame('ORDERS_CREATE', $data['data']['webhookSubscriptionCreate']['topic']); + $this->assertSame('ORDERS_UPDATE', $dataArn['data']['webhookSubscriptionCreate']['topic']); } public function testDeleteWebhook(): void From bcbf756498c34bcccaa61499ae32238e50afc06b Mon Sep 17 00:00:00 2001 From: Usman Shaukat Date: Thu, 2 Nov 2023 22:02:39 +0500 Subject: [PATCH 7/8] Update ApiHelperTest.php --- tests/Services/ApiHelperTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Services/ApiHelperTest.php b/tests/Services/ApiHelperTest.php index ddef531b..06be4c5f 100644 --- a/tests/Services/ApiHelperTest.php +++ b/tests/Services/ApiHelperTest.php @@ -202,7 +202,7 @@ public function testCreateWebhook(): void $data = $shop->apiHelper()->createWebhook([ 'topic' => 'ORDERS_CREATE', 'address' => 'https://localhost/webhook/orders-create', - ]); + ]); $dataArn = $shop->apiHelper()->createWebhook([ 'topic' => 'ORDERS_UPDATE', From 8f329800322435879b3b0d3f585e3afa0d250e83 Mon Sep 17 00:00:00 2001 From: Usman Shaukat Date: Thu, 2 Nov 2023 22:07:49 +0500 Subject: [PATCH 8/8] Update ApiHelperTest.php --- tests/Services/ApiHelperTest.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/Services/ApiHelperTest.php b/tests/Services/ApiHelperTest.php index 06be4c5f..39d7e4d0 100644 --- a/tests/Services/ApiHelperTest.php +++ b/tests/Services/ApiHelperTest.php @@ -205,15 +205,14 @@ public function testCreateWebhook(): void ]); $dataArn = $shop->apiHelper()->createWebhook([ - 'topic' => 'ORDERS_UPDATE', + 'topic' => 'ORDERS_CREATE', 'address' => 'arn:aws:events:us-east-1::event-source/aws.partner/shopify.com/client_id_x/EventBridgeSource', ]); - $this->assertInstanceOf(ResponseAccess::class, $dataArn); $this->assertInstanceOf(ResponseAccess::class, $data); $this->assertInstanceOf(ResponseAccess::class, $dataArn); $this->assertSame('ORDERS_CREATE', $data['data']['webhookSubscriptionCreate']['topic']); - $this->assertSame('ORDERS_UPDATE', $dataArn['data']['webhookSubscriptionCreate']['topic']); + $this->assertSame('ORDERS_CREATE', $dataArn['data']['webhookSubscriptionCreate']['topic']); } public function testDeleteWebhook(): void