shopify_app 21.6.0 → 21.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -0
  3. data/.github/workflows/build.yml +1 -1
  4. data/CHANGELOG.md +17 -0
  5. data/CONTRIBUTING.md +1 -1
  6. data/Gemfile.lock +3 -3
  7. data/README.md +1 -1
  8. data/app/assets/javascripts/shopify_app/app_bridge_3.7.8.js +10 -0
  9. data/app/assets/javascripts/shopify_app/app_bridge_redirect.js +2 -2
  10. data/app/assets/javascripts/shopify_app/redirect.js +1 -2
  11. data/app/controllers/shopify_app/callback_controller.rb +14 -3
  12. data/docs/shopify_app/authentication.md +62 -57
  13. data/docs/shopify_app/controller-concerns.md +35 -15
  14. data/docs/shopify_app/sessions.md +250 -0
  15. data/docs/shopify_app/webhooks.md +38 -4
  16. data/karma.conf.js +6 -1
  17. data/lib/generators/shopify_app/{add_gdpr_jobs/add_gdpr_jobs_generator.rb → add_privacy_jobs/add_privacy_jobs_generator.rb} +1 -1
  18. data/lib/generators/shopify_app/install/templates/shopify_app.rb.tt +2 -1
  19. data/lib/generators/shopify_app/shopify_app_generator.rb +1 -1
  20. data/lib/shopify_app/configuration.rb +3 -1
  21. data/lib/shopify_app/controller_concerns/ensure_billing.rb +3 -0
  22. data/lib/shopify_app/controller_concerns/localization.rb +11 -8
  23. data/lib/shopify_app/managers/webhooks_manager.rb +4 -2
  24. data/lib/shopify_app/session/in_memory_user_session_store.rb +1 -1
  25. data/lib/shopify_app/session/session_repository.rb +37 -3
  26. data/lib/shopify_app/version.rb +1 -1
  27. data/package.json +5 -6
  28. data/shopify_app.gemspec +1 -1
  29. data/yarn.lock +2087 -3882
  30. metadata +11 -13
  31. data/.github/workflows/stale.yml +0 -43
  32. data/app/assets/javascripts/shopify_app/app_bridge_3.1.1.js +0 -10
  33. data/app/assets/javascripts/shopify_app/app_bridge_utils_3.1.1.js +0 -1
  34. data/docs/shopify_app/session-repository.md +0 -79
  35. /data/lib/generators/shopify_app/{add_gdpr_jobs → add_privacy_jobs}/templates/customers_data_request_job.rb.tt +0 -0
  36. /data/lib/generators/shopify_app/{add_gdpr_jobs → add_privacy_jobs}/templates/customers_redact_job.rb.tt +0 -0
  37. /data/lib/generators/shopify_app/{add_gdpr_jobs → add_privacy_jobs}/templates/shop_redact_job.rb.tt +0 -0
@@ -136,6 +136,7 @@ module ShopifyApp
136
136
  },
137
137
  },
138
138
  returnUrl: return_url,
139
+ trialDays: ShopifyApp.configuration.billing.trial_days,
139
140
  test: ShopifyApp.configuration.billing.test,
140
141
  },
141
142
  )
@@ -208,12 +209,14 @@ module ShopifyApp
208
209
  $name: String!
209
210
  $lineItems: [AppSubscriptionLineItemInput!]!
210
211
  $returnUrl: URL!
212
+ $trialDays: Int
211
213
  $test: Boolean
212
214
  ) {
213
215
  appSubscriptionCreate(
214
216
  name: $name
215
217
  lineItems: $lineItems
216
218
  returnUrl: $returnUrl
219
+ trialDays: $trialDays
217
220
  test: $test
218
221
  ) {
219
222
  confirmationUrl
@@ -5,20 +5,23 @@ module ShopifyApp
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- before_action :set_locale
8
+ around_action :set_locale
9
9
  end
10
10
 
11
11
  private
12
12
 
13
- def set_locale
14
- if params[:locale]
15
- session[:locale] = params[:locale]
16
- else
17
- session[:locale] ||= I18n.default_locale
13
+ def set_locale(&action)
14
+ locale = params[:locale] || I18n.default_locale
15
+
16
+ # Fallback to the 2 letter language code if the requested locale unavailable
17
+ unless I18n.available_locales.include?(locale.to_sym)
18
+ locale = locale.split("-").first
18
19
  end
19
- I18n.locale = session[:locale]
20
+
21
+ session[:locale] = locale
22
+ I18n.with_locale(session[:locale], &action)
20
23
  rescue I18n::InvalidLocale
21
- I18n.locale = I18n.default_locale
24
+ I18n.with_locale(I18n.default_locale, &action)
22
25
  end
23
26
  end
24
27
  end
@@ -26,6 +26,7 @@ module ShopifyApp
26
26
 
27
27
  ShopifyApp::Logger.debug("Recreating webhooks")
28
28
  add_registrations
29
+ create_webhooks(session: session)
29
30
  end
30
31
 
31
32
  def destroy_webhooks(session:)
@@ -43,12 +44,13 @@ module ShopifyApp
43
44
  ShopifyApp::Logger.debug("Adding registrations to webhooks")
44
45
  ShopifyApp.configuration.webhooks.each do |attributes|
45
46
  webhook_path = path(attributes)
47
+ delivery_method = attributes[:delivery_method] || :http
46
48
 
47
49
  ShopifyAPI::Webhooks::Registry.add_registration(
48
50
  topic: attributes[:topic],
49
- delivery_method: attributes[:delivery_method] || :http,
51
+ delivery_method: delivery_method,
50
52
  path: webhook_path,
51
- handler: webhook_job_klass(webhook_path),
53
+ handler: delivery_method == :http ? webhook_job_klass(webhook_path) : nil,
52
54
  fields: attributes[:fields],
53
55
  )
54
56
  end
@@ -5,7 +5,7 @@ module ShopifyApp
5
5
  class << self
6
6
  def store(session, user)
7
7
  id = super
8
- repo[user.shopify_user_id] = session
8
+ repo[user.id.to_s] = session
9
9
  id
10
10
  end
11
11
 
@@ -34,7 +34,8 @@ module ShopifyApp
34
34
  def shop_storage
35
35
  load_shop_storage || raise(
36
36
  ::ShopifyApp::ConfigurationError,
37
- "ShopifySessionRepository.shop_storage is not configured!",
37
+ "ShopifyApp::Configuration.shop_session_repository is not configured!\n
38
+ See docs here: https://github.com/Shopify/shopify_app/blob/main/docs/shopify_app/sessions.md#sessions",
38
39
  )
39
40
  end
40
41
 
@@ -92,13 +93,46 @@ module ShopifyApp
92
93
  def load_shop_storage
93
94
  return unless @shop_storage
94
95
 
95
- @shop_storage.respond_to?(:safe_constantize) ? @shop_storage.safe_constantize : @shop_storage
96
+ shop_storage_class =
97
+ @shop_storage.respond_to?(:safe_constantize) ? @shop_storage.safe_constantize : @shop_storage
98
+
99
+ [
100
+ :store,
101
+ :retrieve,
102
+ :retrieve_by_shopify_domain,
103
+ ].each do |method|
104
+ raise(
105
+ ::ShopifyApp::ConfigurationError,
106
+ missing_method_message("shop", method.to_s),
107
+ ) unless shop_storage_class.respond_to?(method)
108
+ end
109
+
110
+ shop_storage_class
96
111
  end
97
112
 
98
113
  def load_user_storage
99
114
  return NullUserSessionStore unless @user_storage
100
115
 
101
- @user_storage.respond_to?(:safe_constantize) ? @user_storage.safe_constantize : @user_storage
116
+ user_storage_class =
117
+ @user_storage.respond_to?(:safe_constantize) ? @user_storage.safe_constantize : @user_storage
118
+
119
+ [
120
+ :store,
121
+ :retrieve,
122
+ :retrieve_by_shopify_user_id,
123
+ ].each do |method|
124
+ raise(
125
+ ::ShopifyApp::ConfigurationError,
126
+ missing_method_message("user", method.to_s),
127
+ ) unless user_storage_class.respond_to?(method)
128
+ end
129
+
130
+ user_storage_class
131
+ end
132
+
133
+ def missing_method_message(type, method)
134
+ "Missing method - '#{method}' implementation for #{type}_storage_repository\n
135
+ See docs here: https://github.com/Shopify/shopify_app/blob/main/docs/shopify_app/sessions.md#sessions"
102
136
  end
103
137
  end
104
138
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ShopifyApp
4
- VERSION = "21.6.0"
4
+ VERSION = "21.8.0"
5
5
  end
data/package.json CHANGED
@@ -1,25 +1,24 @@
1
1
  {
2
2
  "name": "shopify_app",
3
- "version": "21.6.0",
3
+ "version": "21.8.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": "^5.2.1",
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": "^4.0.2",
19
- "mocha": "^8.1.3",
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": "^4.44.1"
21
+ "webpack": "^5.89.0"
23
22
  },
24
23
  "scripts": {
25
24
  "test": "./node_modules/.bin/karma start --browsers ChromeHeadless --single-run"
data/shopify_app.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.add_runtime_dependency("jwt", ">= 2.2.3")
21
21
  s.add_runtime_dependency("rails", "> 5.2.1")
22
22
  s.add_runtime_dependency("redirect_safely", "~> 1.0")
23
- s.add_runtime_dependency("shopify_api", "~> 13.1")
23
+ s.add_runtime_dependency("shopify_api", "~> 13.3")
24
24
  s.add_runtime_dependency("sprockets-rails", ">= 2.0.0")
25
25
 
26
26
  s.add_development_dependency("byebug")