shopify-client 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/shopify-client/client.rb +2 -0
- data/lib/shopify-client/config_error.rb +5 -0
- data/lib/shopify-client/create_all_webhooks.rb +42 -10
- data/lib/shopify-client/create_webhook.rb +4 -2
- data/lib/shopify-client/delete_all_webhooks.rb +32 -10
- data/lib/shopify-client/delete_webhook.rb +0 -2
- data/lib/shopify-client/version.rb +1 -1
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 970f20e5e3da6050c6b5d6dd494ca7426079b34c679390e6e0eeee0113eace8a
|
4
|
+
data.tar.gz: '080d4c2dd0f31c41ab6da721a10808d984899318ed591f9c5cf32238bd1d42ee'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29c0d2d0a38ab6f7d335230b6354ac750f318c6094499908e2332b2713c19b1ebd3b6e6566519f3924f549d6b9b3fd7934334731cf72ff9da30b0bf68d379a4d
|
7
|
+
data.tar.gz: 8229de3254fd8bb22401a86278cba84c16718b620cea1f89cb1c4d5c0d57eccfbe6c33d033d5db432647d5cd287d6daee76f032f6ef968df46a715862bb248ed
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'async/http/faraday'
|
3
4
|
require 'faraday'
|
4
5
|
require 'faraday_middleware'
|
5
6
|
|
@@ -18,6 +19,7 @@ module ShopifyClient
|
|
18
19
|
},
|
19
20
|
url: "https://#{myshopify_domain}/admin/api/#{ShopifyClient.config.api_version}",
|
20
21
|
) do |conn|
|
22
|
+
conn.adapter :async_http
|
21
23
|
# Request throttling to avoid API rate limit.
|
22
24
|
conn.use default_throttling_strategy
|
23
25
|
# Retry for 429, too many requests.
|
@@ -6,20 +6,52 @@ module ShopifyClient
|
|
6
6
|
#
|
7
7
|
# @param client [Client]
|
8
8
|
#
|
9
|
-
# @return [Array<
|
9
|
+
# @return [Array<String>] GraphQL IDs
|
10
10
|
def call(client)
|
11
|
-
|
11
|
+
raise ConfigError, 'webhook_uri is not set' unless ShopifyClient.config.webhook_uri
|
12
12
|
|
13
|
-
ShopifyClient.webhooks.
|
14
|
-
Thread.new do
|
15
|
-
webhook = {}.tap do |webhook|
|
16
|
-
webhook[:topic] = topic
|
17
|
-
webhook[:fields] = options[:fields] unless options[:fields].empty?
|
18
|
-
end
|
13
|
+
webhooks_with_index = ShopifyClient.webhooks.each_with_index
|
19
14
|
|
20
|
-
|
15
|
+
return [] unless webhooks_with_index.any?
|
16
|
+
|
17
|
+
client.graphql(%(
|
18
|
+
mutation webhookSubscriptionCreate(
|
19
|
+
#{webhooks_with_index.map { |_, i| %(
|
20
|
+
$topic#{i}: WebhookSubscriptionTopic!
|
21
|
+
$webhookSubscription#{i}: WebhookSubscriptionInput!
|
22
|
+
)}.join("\n")}
|
23
|
+
) {
|
24
|
+
#{webhooks_with_index.map { |_, i| %(
|
25
|
+
webhookSubscriptionCreate#{i}: webhookSubscriptionCreate(
|
26
|
+
topic: $topic#{i}
|
27
|
+
webhookSubscription: $webhookSubscription#{i}
|
28
|
+
) {
|
29
|
+
userErrors {
|
30
|
+
field
|
31
|
+
message
|
32
|
+
}
|
33
|
+
webhookSubscription {
|
34
|
+
id
|
35
|
+
}
|
36
|
+
}
|
37
|
+
)}.join("\n")}
|
38
|
+
}
|
39
|
+
), webhooks_with_index.each_with_object({}) do |((topic, options), i), variables|
|
40
|
+
variables["topic#{i}"] = topic_to_graphql(topic)
|
41
|
+
variables["webhookSubscription#{i}"] = {}.tap do |subscription|
|
42
|
+
subscription['callbackUrl'] = ShopifyClient.config.webhook_uri
|
43
|
+
subscription['includeFields'] = options[:fields] unless options[:fields].empty?
|
21
44
|
end
|
22
|
-
end.map
|
45
|
+
end).data['data'].map do |_, mutation|
|
46
|
+
mutation['webhookSubscription']['id']
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# @param topic [String]
|
51
|
+
#
|
52
|
+
# @return [String]
|
53
|
+
private def topic_to_graphql(topic)
|
54
|
+
topic.upcase.sub('/', '_')
|
23
55
|
end
|
24
56
|
end
|
25
57
|
end
|
@@ -7,11 +7,13 @@ module ShopifyClient
|
|
7
7
|
# @option webhook [String] :topic
|
8
8
|
# @option webhook [Array<String>] :fields
|
9
9
|
#
|
10
|
-
# @return [
|
10
|
+
# @return [Integer] ID
|
11
11
|
def call(client, webhook)
|
12
|
+
raise ConfigError, 'webhook_uri is not set' unless ShopifyClient.config.webhook_uri
|
13
|
+
|
12
14
|
client.post('webhooks', webhook: webhook.merge(
|
13
15
|
address: ShopifyClient.config.webhook_uri,
|
14
|
-
))
|
16
|
+
)).data['webhook']['id']
|
15
17
|
rescue Response::Error => e
|
16
18
|
raise e unless e.response.errors.message?([
|
17
19
|
/has already been taken/,
|
@@ -5,18 +5,40 @@ module ShopifyClient
|
|
5
5
|
# Delete any existing webhooks.
|
6
6
|
#
|
7
7
|
# @param client [Client]
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
# @param ids [Array<Integer>, nil] GraphQL IDs
|
9
|
+
def call(client, ids: nil)
|
10
|
+
ids ||= client.graphql(%({
|
11
|
+
webhookSubscriptions(first: 100) {
|
12
|
+
edges {
|
13
|
+
node {
|
14
|
+
id
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
})).data['data']['webhookSubscriptions']['edges'].map do |edge|
|
19
|
+
edge['node']['id']
|
20
|
+
end
|
12
21
|
|
13
|
-
|
22
|
+
return if ids.empty?
|
14
23
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
24
|
+
client.graphql(%(
|
25
|
+
mutation webhookSubscriptionDelete(
|
26
|
+
#{ids.each_with_index.map { |_, i| %(
|
27
|
+
$id#{i}: ID!
|
28
|
+
)}.join("\n")}
|
29
|
+
) {
|
30
|
+
#{ids.each_with_index.map { |_, i| %(
|
31
|
+
webhookSubscriptionDelete#{i}: webhookSubscriptionDelete(id: $id#{i}) {
|
32
|
+
userErrors {
|
33
|
+
field
|
34
|
+
message
|
35
|
+
}
|
36
|
+
}
|
37
|
+
)}.join("\n")}
|
38
|
+
}
|
39
|
+
), ids.each_with_index.each_with_object({}) do |(id, i), variables|
|
40
|
+
variables["id#{i}"] = id
|
41
|
+
end)
|
20
42
|
end
|
21
43
|
end
|
22
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shopify-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelsey Judson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dotenv
|
@@ -66,6 +66,34 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.7'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: async
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.29'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.29'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: async-http-faraday
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.11'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.11'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: dry-configurable
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -153,6 +181,7 @@ files:
|
|
153
181
|
- lib/shopify-client/client.rb
|
154
182
|
- lib/shopify-client/client/logging.rb
|
155
183
|
- lib/shopify-client/client/normalise_path.rb
|
184
|
+
- lib/shopify-client/config_error.rb
|
156
185
|
- lib/shopify-client/cookieless/check_header.rb
|
157
186
|
- lib/shopify-client/cookieless/decode_session_token.rb
|
158
187
|
- lib/shopify-client/cookieless/middleware.rb
|