shopify_app 21.0.0 → 22.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +1 -0
- data/.github/ISSUE_TEMPLATE/ENHANCEMENT.md +9 -0
- data/.github/ISSUE_TEMPLATE/bug-report.md +30 -47
- data/.github/ISSUE_TEMPLATE/feature-request.md +5 -29
- data/.github/workflows/build.yml +11 -12
- data/.github/workflows/release.yml +2 -2
- data/.github/workflows/remove-labels-on-activity.yml +1 -1
- data/.github/workflows/rubocop.yml +2 -3
- data/.nvmrc +1 -1
- data/.rubocop.yml +2 -1
- data/.ruby-version +1 -1
- data/.spin/rails/prepare-application +8 -0
- data/CHANGELOG.md +173 -7
- data/CODE_OF_CONDUCT.md +46 -0
- data/CONTRIBUTING.md +16 -6
- data/Gemfile +1 -0
- data/Gemfile.lock +160 -121
- data/README.md +67 -19
- data/SECURITY.md +1 -1
- data/app/assets/javascripts/shopify_app/redirect.js +3 -10
- data/app/controllers/concerns/shopify_app/ensure_authenticated_links.rb +9 -4
- data/app/controllers/concerns/shopify_app/ensure_has_session.rb +25 -0
- data/app/controllers/concerns/shopify_app/ensure_installed.rb +84 -0
- data/app/controllers/concerns/shopify_app/shop_access_scopes_verification.rb +5 -1
- data/app/controllers/shopify_app/authenticated_controller.rb +1 -1
- data/app/controllers/shopify_app/callback_controller.rb +101 -39
- data/app/controllers/shopify_app/extension_verification_controller.rb +4 -1
- data/app/controllers/shopify_app/sessions_controller.rb +37 -7
- data/app/controllers/shopify_app/webhooks_controller.rb +1 -1
- data/app/views/shopify_app/layouts/app_bridge.html.erb +17 -0
- data/app/views/shopify_app/sessions/patch_shopify_id_token.html.erb +0 -0
- data/app/views/shopify_app/shared/redirect.html.erb +10 -1
- data/config/locales/cs.yml +0 -18
- data/config/locales/da.yml +0 -15
- data/config/locales/de.yml +0 -17
- data/config/locales/en.yml +0 -11
- data/config/locales/es.yml +0 -17
- data/config/locales/fi.yml +0 -15
- data/config/locales/fr.yml +0 -18
- data/config/locales/it.yml +0 -16
- data/config/locales/ja.yml +0 -12
- data/config/locales/ko.yml +0 -14
- data/config/locales/nb.yml +0 -16
- data/config/locales/nl.yml +0 -16
- data/config/locales/pl.yml +0 -16
- data/config/locales/pt-BR.yml +0 -16
- data/config/locales/pt-PT.yml +0 -17
- data/config/locales/sv.yml +0 -16
- data/config/locales/th.yml +0 -15
- data/config/locales/tr.yml +0 -17
- data/config/locales/vi.yml +0 -17
- data/config/locales/zh-CN.yml +0 -11
- data/config/locales/zh-TW.yml +0 -11
- data/config/routes.rb +2 -1
- data/docs/Quickstart.md +14 -5
- data/docs/Troubleshooting.md +38 -25
- data/docs/Upgrading.md +103 -32
- data/docs/shopify_app/authentication.md +179 -58
- data/docs/shopify_app/controller-concerns.md +89 -0
- data/docs/shopify_app/engine.md +2 -11
- data/docs/shopify_app/generators.md +2 -2
- data/docs/shopify_app/logging.md +21 -0
- data/docs/shopify_app/sessions.md +358 -0
- data/docs/shopify_app/testing.md +32 -10
- data/docs/shopify_app/webhooks.md +97 -7
- data/karma.conf.js +6 -4
- data/lib/generators/shopify_app/add_after_authenticate_job/add_after_authenticate_job_generator.rb +6 -3
- data/lib/generators/shopify_app/add_after_authenticate_job/templates/after_authenticate_job.rb +1 -1
- data/lib/generators/shopify_app/add_app_uninstalled_job/add_app_uninstalled_job_generator.rb +15 -0
- data/lib/generators/shopify_app/add_app_uninstalled_job/templates/app_uninstalled_job.rb.tt +22 -0
- data/lib/generators/shopify_app/add_declarative_webhook/add_declarative_webhook_generator.rb +53 -0
- data/lib/generators/shopify_app/add_declarative_webhook/templates/webhook_controller.rb.tt +13 -0
- data/lib/generators/shopify_app/add_declarative_webhook/templates/webhook_job.rb.tt +15 -0
- data/lib/generators/shopify_app/add_privacy_jobs/add_privacy_jobs_generator.rb +23 -0
- data/lib/generators/shopify_app/add_privacy_jobs/templates/customers_data_request_job.rb.tt +22 -0
- data/lib/generators/shopify_app/add_privacy_jobs/templates/customers_redact_job.rb.tt +22 -0
- data/lib/generators/shopify_app/add_privacy_jobs/templates/shop_redact_job.rb.tt +22 -0
- data/lib/generators/shopify_app/add_webhook/add_webhook_generator.rb +8 -3
- data/lib/generators/shopify_app/add_webhook/templates/webhook_job.rb.tt +4 -2
- data/lib/generators/shopify_app/app_proxy_controller/app_proxy_controller_generator.rb +1 -1
- data/lib/generators/shopify_app/authenticated_controller/templates/authenticated_controller.rb +1 -1
- data/lib/generators/shopify_app/home_controller/templates/index.html.erb +1 -1
- data/lib/generators/shopify_app/home_controller/templates/unauthenticated_home_controller.rb +1 -1
- data/lib/generators/shopify_app/install/install_generator.rb +4 -4
- data/lib/generators/shopify_app/install/templates/shopify_app.rb.tt +13 -3
- data/lib/generators/shopify_app/rotate_shopify_token_job/templates/rotate_shopify_token.rake +1 -1
- data/lib/generators/shopify_app/rotate_shopify_token_job/templates/rotate_shopify_token_job.rb +1 -1
- data/lib/generators/shopify_app/routes/routes_generator.rb +1 -1
- data/lib/generators/shopify_app/shop_model/shop_model_generator.rb +1 -1
- data/lib/generators/shopify_app/shop_model/templates/db/migrate/add_shop_access_scopes_column.erb +1 -1
- data/lib/generators/shopify_app/shopify_app_generator.rb +2 -0
- data/lib/generators/shopify_app/user_model/templates/db/migrate/add_user_access_scopes_column.erb +1 -1
- data/lib/generators/shopify_app/user_model/templates/db/migrate/add_user_expires_at_column.erb +5 -0
- data/lib/generators/shopify_app/user_model/user_model_generator.rb +21 -1
- data/lib/shopify_app/access_scopes/noop_strategy.rb +4 -0
- data/lib/shopify_app/access_scopes/user_strategy.rb +9 -2
- data/lib/shopify_app/admin_api/with_token_refetch.rb +27 -0
- data/lib/shopify_app/auth/post_authenticate_tasks.rb +48 -0
- data/lib/shopify_app/auth/token_exchange.rb +73 -0
- data/lib/shopify_app/configuration.rb +82 -1
- data/lib/shopify_app/controller_concerns/app_proxy_verification.rb +3 -3
- data/lib/shopify_app/controller_concerns/csrf_protection.rb +2 -1
- data/lib/shopify_app/controller_concerns/embedded_app.rb +42 -3
- data/lib/shopify_app/controller_concerns/ensure_billing.rb +28 -12
- data/lib/shopify_app/controller_concerns/frame_ancestors.rb +1 -1
- data/lib/shopify_app/controller_concerns/localization.rb +11 -8
- data/lib/shopify_app/controller_concerns/login_protection.rb +83 -38
- data/lib/shopify_app/controller_concerns/payload_verification.rb +1 -1
- data/lib/shopify_app/controller_concerns/redirect_for_embedded.rb +15 -3
- data/lib/shopify_app/controller_concerns/sanitized_params.rb +5 -0
- data/lib/shopify_app/controller_concerns/token_exchange.rb +111 -0
- data/lib/shopify_app/controller_concerns/webhook_verification.rb +4 -1
- data/lib/shopify_app/controller_concerns/with_shopify_id_token.rb +48 -0
- data/lib/shopify_app/engine.rb +7 -8
- data/lib/shopify_app/logger.rb +28 -0
- data/lib/shopify_app/managers/webhooks_manager.rb +20 -10
- data/lib/shopify_app/middleware/jwt_middleware.rb +13 -9
- data/lib/shopify_app/session/in_memory_user_session_store.rb +1 -1
- data/lib/shopify_app/session/jwt.rb +11 -2
- data/lib/shopify_app/session/session_repository.rb +66 -14
- data/lib/shopify_app/session/session_storage.rb +2 -2
- data/lib/shopify_app/session/shop_session_storage.rb +5 -1
- data/lib/shopify_app/session/shop_session_storage_with_scopes.rb +5 -1
- data/lib/shopify_app/session/user_session_storage.rb +6 -2
- data/lib/shopify_app/session/user_session_storage_with_scopes.rb +27 -2
- data/lib/shopify_app/test_helpers/all.rb +1 -0
- data/lib/shopify_app/test_helpers/shopify_session_helper.rb +16 -0
- data/lib/shopify_app/utils.rb +82 -20
- data/lib/shopify_app/version.rb +1 -1
- data/lib/shopify_app.rb +12 -3
- data/package.json +5 -6
- data/service.yml +0 -2
- data/shopify_app.gemspec +6 -5
- data/translation.yml +1 -0
- data/yarn.lock +2139 -3910
- metadata +78 -58
- data/.github/workflows/stale.yml +0 -31
- data/app/assets/images/storage_access.svg +0 -1
- data/app/assets/javascripts/shopify_app/app_bridge_3.1.1.js +0 -10
- data/app/assets/javascripts/shopify_app/app_bridge_redirect.js +0 -22
- data/app/assets/javascripts/shopify_app/app_bridge_utils_3.1.1.js +0 -1
- data/app/assets/javascripts/shopify_app/enable_cookies.js +0 -3
- data/app/assets/javascripts/shopify_app/itp_helper.js +0 -40
- data/app/assets/javascripts/shopify_app/partition_cookies.js +0 -8
- data/app/assets/javascripts/shopify_app/post_redirect.js +0 -9
- data/app/assets/javascripts/shopify_app/request_storage_access.js +0 -3
- data/app/assets/javascripts/shopify_app/storage_access.js +0 -148
- data/app/assets/javascripts/shopify_app/storage_access_redirect.js +0 -17
- data/app/assets/javascripts/shopify_app/top_level.js +0 -2
- data/app/assets/javascripts/shopify_app/top_level_interaction.js +0 -11
- data/app/controllers/concerns/shopify_app/authenticated.rb +0 -19
- data/app/controllers/concerns/shopify_app/require_known_shop.rb +0 -48
- data/app/views/shopify_app/sessions/enable_cookies.html.erb +0 -70
- data/app/views/shopify_app/sessions/request_storage_access.html.erb +0 -68
- data/app/views/shopify_app/sessions/top_level_interaction.html.erb +0 -63
- data/app/views/shopify_app/shared/post_redirect_to_auth_shopify.html.erb +0 -13
- data/docs/shopify_app/script-tags.md +0 -28
- data/docs/shopify_app/session-repository.md +0 -88
- data/lib/generators/shopify_app/add_marketing_activity_extension/add_marketing_activity_extension_generator.rb +0 -41
- data/lib/generators/shopify_app/add_marketing_activity_extension/templates/marketing_activities_controller.rb +0 -62
- data/lib/shopify_app/controller_concerns/itp.rb +0 -45
- data/lib/shopify_app/jobs/scripttags_manager_job.rb +0 -16
- data/lib/shopify_app/managers/scripttags_manager.rb +0 -84
@@ -28,6 +28,10 @@ module ShopifyApp
|
|
28
28
|
construct_session(user)
|
29
29
|
end
|
30
30
|
|
31
|
+
def destroy_by_shopify_user_id(user_id)
|
32
|
+
destroy_by(shopify_user_id: user_id)
|
33
|
+
end
|
34
|
+
|
31
35
|
private
|
32
36
|
|
33
37
|
def construct_session(user)
|
@@ -41,13 +45,13 @@ module ShopifyApp
|
|
41
45
|
email_verified: false,
|
42
46
|
account_owner: false,
|
43
47
|
locale: "",
|
44
|
-
collaborator: false
|
48
|
+
collaborator: false,
|
45
49
|
)
|
46
50
|
|
47
51
|
ShopifyAPI::Auth::Session.new(
|
48
52
|
shop: user.shopify_domain,
|
49
53
|
access_token: user.shopify_token,
|
50
|
-
associated_user: associated_user
|
54
|
+
associated_user: associated_user,
|
51
55
|
)
|
52
56
|
end
|
53
57
|
end
|
@@ -15,6 +15,7 @@ module ShopifyApp
|
|
15
15
|
user.shopify_token = auth_session.access_token
|
16
16
|
user.shopify_domain = auth_session.shop
|
17
17
|
user.access_scopes = auth_session.scope.to_s
|
18
|
+
user.expires_at = auth_session.expires
|
18
19
|
|
19
20
|
user.save!
|
20
21
|
user.id
|
@@ -30,6 +31,10 @@ module ShopifyApp
|
|
30
31
|
construct_session(user)
|
31
32
|
end
|
32
33
|
|
34
|
+
def destroy_by_shopify_user_id(user_id)
|
35
|
+
destroy_by(shopify_user_id: user_id)
|
36
|
+
end
|
37
|
+
|
33
38
|
private
|
34
39
|
|
35
40
|
def construct_session(user)
|
@@ -43,7 +48,7 @@ module ShopifyApp
|
|
43
48
|
email_verified: false,
|
44
49
|
account_owner: false,
|
45
50
|
locale: "",
|
46
|
-
collaborator: false
|
51
|
+
collaborator: false,
|
47
52
|
)
|
48
53
|
|
49
54
|
ShopifyAPI::Auth::Session.new(
|
@@ -51,7 +56,8 @@ module ShopifyApp
|
|
51
56
|
access_token: user.shopify_token,
|
52
57
|
scope: user.access_scopes,
|
53
58
|
associated_user_scope: user.access_scopes,
|
54
|
-
associated_user: associated_user
|
59
|
+
associated_user: associated_user,
|
60
|
+
expires: user.expires_at,
|
55
61
|
)
|
56
62
|
end
|
57
63
|
end
|
@@ -67,5 +73,24 @@ module ShopifyApp
|
|
67
73
|
rescue NotImplementedError, NoMethodError
|
68
74
|
raise NotImplementedError, "#access_scopes= must be defined to hook into stored access scopes"
|
69
75
|
end
|
76
|
+
|
77
|
+
def expires_at=(expires_at)
|
78
|
+
super
|
79
|
+
rescue NotImplementedError, NoMethodError
|
80
|
+
if ShopifyApp.configuration.check_session_expiry_date
|
81
|
+
raise NotImplementedError,
|
82
|
+
"#expires_at= must be defined to handle storing the session expiry date"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def expires_at
|
87
|
+
super
|
88
|
+
rescue NotImplementedError, NoMethodError
|
89
|
+
if ShopifyApp.configuration.check_session_expiry_date
|
90
|
+
raise NotImplementedError, "#expires_at must be defined to check the session expiry date"
|
91
|
+
end
|
92
|
+
|
93
|
+
nil
|
94
|
+
end
|
70
95
|
end
|
71
96
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ShopifyApp
|
4
|
+
module TestHelpers
|
5
|
+
module ShopifySessionHelper
|
6
|
+
def setup_shopify_session(session_id:, shop_domain:)
|
7
|
+
ShopifyAPI::Auth::Session.new(id: session_id, shop: shop_domain).tap do |session|
|
8
|
+
ShopifyApp::SessionRepository.stubs(:load_session).returns(session)
|
9
|
+
ShopifyAPI::Utils::SessionUtils.stubs(:current_session_id).returns(session.id)
|
10
|
+
ShopifyAPI::Utils::SessionUtils.stubs(:session_id_from_shopify_id_token).returns(session.id)
|
11
|
+
ShopifyAPI::Context.activate_session(session)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/shopify_app/utils.rb
CHANGED
@@ -2,30 +2,92 @@
|
|
2
2
|
|
3
3
|
module ShopifyApp
|
4
4
|
module Utils
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
5
|
+
class << self
|
6
|
+
TRUSTED_SHOPIFY_DOMAINS = [
|
7
|
+
"shopify.com",
|
8
|
+
"myshopify.io",
|
9
|
+
"myshopify.com",
|
10
|
+
"spin.dev",
|
11
|
+
].freeze
|
12
|
+
|
13
|
+
def sanitize_shop_domain(shop_domain)
|
14
|
+
uri = uri_from_shop_domain(shop_domain)
|
15
|
+
return nil if uri.nil? || uri.host.nil?
|
16
|
+
|
17
|
+
trusted_domains.each do |trusted_domain|
|
18
|
+
no_shop_name_in_subdomain = uri.host == trusted_domain
|
19
|
+
from_trusted_domain = trusted_domain == uri.domain
|
20
|
+
|
21
|
+
return myshopify_domain_from_unified_admin(uri) if unified_admin?(uri) && from_trusted_domain
|
22
|
+
return nil if no_shop_name_in_subdomain || uri.host&.empty?
|
23
|
+
return uri.host if from_trusted_domain
|
24
|
+
end
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def shop_login_url(shop:, host:, return_to:)
|
29
|
+
return ShopifyApp.configuration.login_url unless shop
|
30
|
+
|
31
|
+
url = URI(ShopifyApp.configuration.login_url)
|
32
|
+
|
33
|
+
url.query = URI.encode_www_form(
|
34
|
+
shop: shop,
|
35
|
+
host: host,
|
36
|
+
return_to: return_to,
|
37
|
+
)
|
38
|
+
|
39
|
+
url.to_s
|
40
|
+
end
|
41
|
+
|
42
|
+
def unified_admin_path(shop)
|
43
|
+
spin_env = ENV.fetch("SPIN_FQDN", nil)
|
44
|
+
if spin_env
|
45
|
+
"https://admin.web.#{spin_env}/store/#{shop}"
|
46
|
+
else
|
47
|
+
"https://admin.#{unified_admin_domain}/store/#{shop}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def myshopify_domain
|
54
|
+
ShopifyApp.configuration.myshopify_domain
|
55
|
+
end
|
56
|
+
|
57
|
+
def unified_admin_domain
|
58
|
+
ShopifyApp.configuration.unified_admin_domain
|
59
|
+
end
|
60
|
+
|
61
|
+
def trusted_domains
|
62
|
+
trusted_domains = TRUSTED_SHOPIFY_DOMAINS.dup
|
63
|
+
trusted_domains.append(myshopify_domain).uniq! if myshopify_domain
|
64
|
+
trusted_domains
|
65
|
+
end
|
66
|
+
|
67
|
+
def uri_from_shop_domain(shop_domain)
|
68
|
+
name = shop_domain.to_s.downcase.strip
|
69
|
+
name += ".#{myshopify_domain}" if !name.include?(myshopify_domain.to_s) && !name.include?(".")
|
70
|
+
uri = Addressable::URI.parse(name)
|
71
|
+
|
72
|
+
if uri.scheme.nil?
|
73
|
+
name = "https://" + name
|
74
|
+
uri = Addressable::URI.parse(name)
|
75
|
+
end
|
16
76
|
|
17
|
-
|
18
|
-
|
77
|
+
uri
|
78
|
+
rescue Addressable::URI::InvalidURIError
|
79
|
+
nil
|
80
|
+
end
|
19
81
|
|
20
|
-
|
82
|
+
def unified_admin?(uri)
|
83
|
+
uri.host.split(".").first == "admin"
|
84
|
+
end
|
21
85
|
|
22
|
-
|
23
|
-
shop
|
24
|
-
host: host,
|
25
|
-
return_to: return_to,
|
26
|
-
)
|
86
|
+
def myshopify_domain_from_unified_admin(uri)
|
87
|
+
shop = uri.path.split("/").last
|
27
88
|
|
28
|
-
|
89
|
+
"#{shop}.myshopify.com"
|
90
|
+
end
|
29
91
|
end
|
30
92
|
end
|
31
93
|
end
|
data/lib/shopify_app/version.rb
CHANGED
data/lib/shopify_app.rb
CHANGED
@@ -5,6 +5,7 @@ require "shopify_app/version"
|
|
5
5
|
# deps
|
6
6
|
require "shopify_api"
|
7
7
|
require "redirect_safely"
|
8
|
+
require "addressable"
|
8
9
|
|
9
10
|
module ShopifyApp
|
10
11
|
def self.rails6?
|
@@ -37,11 +38,15 @@ module ShopifyApp
|
|
37
38
|
# errors
|
38
39
|
require "shopify_app/errors"
|
39
40
|
|
41
|
+
require "shopify_app/logger"
|
42
|
+
|
43
|
+
# Admin API helpers
|
44
|
+
require "shopify_app/admin_api/with_token_refetch"
|
45
|
+
|
40
46
|
# controller concerns
|
41
47
|
require "shopify_app/controller_concerns/csrf_protection"
|
42
48
|
require "shopify_app/controller_concerns/localization"
|
43
49
|
require "shopify_app/controller_concerns/frame_ancestors"
|
44
|
-
require "shopify_app/controller_concerns/itp"
|
45
50
|
require "shopify_app/controller_concerns/sanitized_params"
|
46
51
|
require "shopify_app/controller_concerns/redirect_for_embedded"
|
47
52
|
require "shopify_app/controller_concerns/login_protection"
|
@@ -50,14 +55,18 @@ module ShopifyApp
|
|
50
55
|
require "shopify_app/controller_concerns/payload_verification"
|
51
56
|
require "shopify_app/controller_concerns/app_proxy_verification"
|
52
57
|
require "shopify_app/controller_concerns/webhook_verification"
|
58
|
+
require "shopify_app/controller_concerns/token_exchange"
|
59
|
+
require "shopify_app/controller_concerns/with_shopify_id_token"
|
60
|
+
|
61
|
+
# Auth helpers
|
62
|
+
require "shopify_app/auth/post_authenticate_tasks"
|
63
|
+
require "shopify_app/auth/token_exchange"
|
53
64
|
|
54
65
|
# jobs
|
55
66
|
require "shopify_app/jobs/webhooks_manager_job"
|
56
|
-
require "shopify_app/jobs/scripttags_manager_job"
|
57
67
|
|
58
68
|
# managers
|
59
69
|
require "shopify_app/managers/webhooks_manager"
|
60
|
-
require "shopify_app/managers/scripttags_manager"
|
61
70
|
|
62
71
|
# middleware
|
63
72
|
require "shopify_app/middleware/jwt_middleware"
|
data/package.json
CHANGED
@@ -1,25 +1,24 @@
|
|
1
1
|
{
|
2
2
|
"name": "shopify_app",
|
3
|
-
"version": "
|
3
|
+
"version": "22.5.0",
|
4
4
|
"repository": "git@github.com:Shopify/shopify_app.git",
|
5
5
|
"author": "Shopify",
|
6
6
|
"license": "MIT",
|
7
|
-
"dependencies": {},
|
8
7
|
"devDependencies": {
|
9
8
|
"babel-loader": "^8.0.6",
|
10
9
|
"babel-preset-shopify": "^21.0.0",
|
11
10
|
"chai": "^4.1.2",
|
12
|
-
"karma": "^
|
11
|
+
"karma": "^6.4.2",
|
13
12
|
"karma-chai-sinon": "^0.1.5",
|
14
13
|
"karma-chrome-launcher": "^3.1.0",
|
15
14
|
"karma-cli": "^2.0.0",
|
16
15
|
"karma-mocha": "^2.0.1",
|
17
16
|
"karma-mocha-clean-reporter": "^0.0.1",
|
18
|
-
"karma-webpack": "^
|
19
|
-
"mocha": "^
|
17
|
+
"karma-webpack": "^5.0.0",
|
18
|
+
"mocha": "^10.2.0",
|
20
19
|
"sinon": "^9.0.3",
|
21
20
|
"sinon-chai": "^3.2.0",
|
22
|
-
"webpack": "^
|
21
|
+
"webpack": "^5.94.0"
|
23
22
|
},
|
24
23
|
"scripts": {
|
25
24
|
"test": "./node_modules/.bin/karma start --browsers ChromeHeadless --single-run"
|
data/service.yml
CHANGED
data/shopify_app.gemspec
CHANGED
@@ -10,17 +10,18 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.author = "Shopify"
|
11
11
|
s.summary = "This gem is used to get quickly started with the Shopify API"
|
12
12
|
|
13
|
-
s.required_ruby_version = ">=
|
13
|
+
s.required_ruby_version = ">= 3.0"
|
14
14
|
|
15
15
|
s.metadata["allowed_push_host"] = "https://rubygems.org"
|
16
16
|
|
17
17
|
s.add_runtime_dependency("activeresource") # TODO: Remove this once all active resource dependencies are removed
|
18
|
-
s.add_runtime_dependency("
|
19
|
-
s.add_runtime_dependency("jwt", ">= 2.2.3")
|
18
|
+
s.add_runtime_dependency("addressable", "~> 2.7")
|
20
19
|
s.add_runtime_dependency("rails", "> 5.2.1")
|
21
20
|
s.add_runtime_dependency("redirect_safely", "~> 1.0")
|
22
|
-
s.add_runtime_dependency("shopify_api", "
|
21
|
+
s.add_runtime_dependency("shopify_api", ">= 14.7.0", "< 15.0")
|
23
22
|
s.add_runtime_dependency("sprockets-rails", ">= 2.0.0")
|
23
|
+
# Deprecated: move to development dependencies when releasing v23
|
24
|
+
s.add_runtime_dependency("jwt", ">= 2.2.3")
|
24
25
|
|
25
26
|
s.add_development_dependency("byebug")
|
26
27
|
s.add_development_dependency("minitest")
|
@@ -30,10 +31,10 @@ Gem::Specification.new do |s|
|
|
30
31
|
s.add_development_dependency("pry-stack_explorer")
|
31
32
|
s.add_development_dependency("rake")
|
32
33
|
s.add_development_dependency("rb-readline")
|
34
|
+
s.add_development_dependency("ruby-lsp")
|
33
35
|
s.add_development_dependency("sqlite3", "~> 1.4")
|
34
36
|
s.add_development_dependency("webmock")
|
35
37
|
|
36
38
|
s.files = %x(git ls-files).split("\n").reject { |f| f.match(%r{^(test|example)/}) }
|
37
|
-
s.test_files = %x(git ls-files -- {test}/*).split("\n")
|
38
39
|
s.require_paths = ["lib"]
|
39
40
|
end
|