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.
Files changed (164) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -0
  3. data/.github/ISSUE_TEMPLATE/ENHANCEMENT.md +9 -0
  4. data/.github/ISSUE_TEMPLATE/bug-report.md +30 -47
  5. data/.github/ISSUE_TEMPLATE/feature-request.md +5 -29
  6. data/.github/workflows/build.yml +11 -12
  7. data/.github/workflows/release.yml +2 -2
  8. data/.github/workflows/remove-labels-on-activity.yml +1 -1
  9. data/.github/workflows/rubocop.yml +2 -3
  10. data/.nvmrc +1 -1
  11. data/.rubocop.yml +2 -1
  12. data/.ruby-version +1 -1
  13. data/.spin/rails/prepare-application +8 -0
  14. data/CHANGELOG.md +173 -7
  15. data/CODE_OF_CONDUCT.md +46 -0
  16. data/CONTRIBUTING.md +16 -6
  17. data/Gemfile +1 -0
  18. data/Gemfile.lock +160 -121
  19. data/README.md +67 -19
  20. data/SECURITY.md +1 -1
  21. data/app/assets/javascripts/shopify_app/redirect.js +3 -10
  22. data/app/controllers/concerns/shopify_app/ensure_authenticated_links.rb +9 -4
  23. data/app/controllers/concerns/shopify_app/ensure_has_session.rb +25 -0
  24. data/app/controllers/concerns/shopify_app/ensure_installed.rb +84 -0
  25. data/app/controllers/concerns/shopify_app/shop_access_scopes_verification.rb +5 -1
  26. data/app/controllers/shopify_app/authenticated_controller.rb +1 -1
  27. data/app/controllers/shopify_app/callback_controller.rb +101 -39
  28. data/app/controllers/shopify_app/extension_verification_controller.rb +4 -1
  29. data/app/controllers/shopify_app/sessions_controller.rb +37 -7
  30. data/app/controllers/shopify_app/webhooks_controller.rb +1 -1
  31. data/app/views/shopify_app/layouts/app_bridge.html.erb +17 -0
  32. data/app/views/shopify_app/sessions/patch_shopify_id_token.html.erb +0 -0
  33. data/app/views/shopify_app/shared/redirect.html.erb +10 -1
  34. data/config/locales/cs.yml +0 -18
  35. data/config/locales/da.yml +0 -15
  36. data/config/locales/de.yml +0 -17
  37. data/config/locales/en.yml +0 -11
  38. data/config/locales/es.yml +0 -17
  39. data/config/locales/fi.yml +0 -15
  40. data/config/locales/fr.yml +0 -18
  41. data/config/locales/it.yml +0 -16
  42. data/config/locales/ja.yml +0 -12
  43. data/config/locales/ko.yml +0 -14
  44. data/config/locales/nb.yml +0 -16
  45. data/config/locales/nl.yml +0 -16
  46. data/config/locales/pl.yml +0 -16
  47. data/config/locales/pt-BR.yml +0 -16
  48. data/config/locales/pt-PT.yml +0 -17
  49. data/config/locales/sv.yml +0 -16
  50. data/config/locales/th.yml +0 -15
  51. data/config/locales/tr.yml +0 -17
  52. data/config/locales/vi.yml +0 -17
  53. data/config/locales/zh-CN.yml +0 -11
  54. data/config/locales/zh-TW.yml +0 -11
  55. data/config/routes.rb +2 -1
  56. data/docs/Quickstart.md +14 -5
  57. data/docs/Troubleshooting.md +38 -25
  58. data/docs/Upgrading.md +103 -32
  59. data/docs/shopify_app/authentication.md +179 -58
  60. data/docs/shopify_app/controller-concerns.md +89 -0
  61. data/docs/shopify_app/engine.md +2 -11
  62. data/docs/shopify_app/generators.md +2 -2
  63. data/docs/shopify_app/logging.md +21 -0
  64. data/docs/shopify_app/sessions.md +358 -0
  65. data/docs/shopify_app/testing.md +32 -10
  66. data/docs/shopify_app/webhooks.md +97 -7
  67. data/karma.conf.js +6 -4
  68. data/lib/generators/shopify_app/add_after_authenticate_job/add_after_authenticate_job_generator.rb +6 -3
  69. data/lib/generators/shopify_app/add_after_authenticate_job/templates/after_authenticate_job.rb +1 -1
  70. data/lib/generators/shopify_app/add_app_uninstalled_job/add_app_uninstalled_job_generator.rb +15 -0
  71. data/lib/generators/shopify_app/add_app_uninstalled_job/templates/app_uninstalled_job.rb.tt +22 -0
  72. data/lib/generators/shopify_app/add_declarative_webhook/add_declarative_webhook_generator.rb +53 -0
  73. data/lib/generators/shopify_app/add_declarative_webhook/templates/webhook_controller.rb.tt +13 -0
  74. data/lib/generators/shopify_app/add_declarative_webhook/templates/webhook_job.rb.tt +15 -0
  75. data/lib/generators/shopify_app/add_privacy_jobs/add_privacy_jobs_generator.rb +23 -0
  76. data/lib/generators/shopify_app/add_privacy_jobs/templates/customers_data_request_job.rb.tt +22 -0
  77. data/lib/generators/shopify_app/add_privacy_jobs/templates/customers_redact_job.rb.tt +22 -0
  78. data/lib/generators/shopify_app/add_privacy_jobs/templates/shop_redact_job.rb.tt +22 -0
  79. data/lib/generators/shopify_app/add_webhook/add_webhook_generator.rb +8 -3
  80. data/lib/generators/shopify_app/add_webhook/templates/webhook_job.rb.tt +4 -2
  81. data/lib/generators/shopify_app/app_proxy_controller/app_proxy_controller_generator.rb +1 -1
  82. data/lib/generators/shopify_app/authenticated_controller/templates/authenticated_controller.rb +1 -1
  83. data/lib/generators/shopify_app/home_controller/templates/index.html.erb +1 -1
  84. data/lib/generators/shopify_app/home_controller/templates/unauthenticated_home_controller.rb +1 -1
  85. data/lib/generators/shopify_app/install/install_generator.rb +4 -4
  86. data/lib/generators/shopify_app/install/templates/shopify_app.rb.tt +13 -3
  87. data/lib/generators/shopify_app/rotate_shopify_token_job/templates/rotate_shopify_token.rake +1 -1
  88. data/lib/generators/shopify_app/rotate_shopify_token_job/templates/rotate_shopify_token_job.rb +1 -1
  89. data/lib/generators/shopify_app/routes/routes_generator.rb +1 -1
  90. data/lib/generators/shopify_app/shop_model/shop_model_generator.rb +1 -1
  91. data/lib/generators/shopify_app/shop_model/templates/db/migrate/add_shop_access_scopes_column.erb +1 -1
  92. data/lib/generators/shopify_app/shopify_app_generator.rb +2 -0
  93. data/lib/generators/shopify_app/user_model/templates/db/migrate/add_user_access_scopes_column.erb +1 -1
  94. data/lib/generators/shopify_app/user_model/templates/db/migrate/add_user_expires_at_column.erb +5 -0
  95. data/lib/generators/shopify_app/user_model/user_model_generator.rb +21 -1
  96. data/lib/shopify_app/access_scopes/noop_strategy.rb +4 -0
  97. data/lib/shopify_app/access_scopes/user_strategy.rb +9 -2
  98. data/lib/shopify_app/admin_api/with_token_refetch.rb +27 -0
  99. data/lib/shopify_app/auth/post_authenticate_tasks.rb +48 -0
  100. data/lib/shopify_app/auth/token_exchange.rb +73 -0
  101. data/lib/shopify_app/configuration.rb +82 -1
  102. data/lib/shopify_app/controller_concerns/app_proxy_verification.rb +3 -3
  103. data/lib/shopify_app/controller_concerns/csrf_protection.rb +2 -1
  104. data/lib/shopify_app/controller_concerns/embedded_app.rb +42 -3
  105. data/lib/shopify_app/controller_concerns/ensure_billing.rb +28 -12
  106. data/lib/shopify_app/controller_concerns/frame_ancestors.rb +1 -1
  107. data/lib/shopify_app/controller_concerns/localization.rb +11 -8
  108. data/lib/shopify_app/controller_concerns/login_protection.rb +83 -38
  109. data/lib/shopify_app/controller_concerns/payload_verification.rb +1 -1
  110. data/lib/shopify_app/controller_concerns/redirect_for_embedded.rb +15 -3
  111. data/lib/shopify_app/controller_concerns/sanitized_params.rb +5 -0
  112. data/lib/shopify_app/controller_concerns/token_exchange.rb +111 -0
  113. data/lib/shopify_app/controller_concerns/webhook_verification.rb +4 -1
  114. data/lib/shopify_app/controller_concerns/with_shopify_id_token.rb +48 -0
  115. data/lib/shopify_app/engine.rb +7 -8
  116. data/lib/shopify_app/logger.rb +28 -0
  117. data/lib/shopify_app/managers/webhooks_manager.rb +20 -10
  118. data/lib/shopify_app/middleware/jwt_middleware.rb +13 -9
  119. data/lib/shopify_app/session/in_memory_user_session_store.rb +1 -1
  120. data/lib/shopify_app/session/jwt.rb +11 -2
  121. data/lib/shopify_app/session/session_repository.rb +66 -14
  122. data/lib/shopify_app/session/session_storage.rb +2 -2
  123. data/lib/shopify_app/session/shop_session_storage.rb +5 -1
  124. data/lib/shopify_app/session/shop_session_storage_with_scopes.rb +5 -1
  125. data/lib/shopify_app/session/user_session_storage.rb +6 -2
  126. data/lib/shopify_app/session/user_session_storage_with_scopes.rb +27 -2
  127. data/lib/shopify_app/test_helpers/all.rb +1 -0
  128. data/lib/shopify_app/test_helpers/shopify_session_helper.rb +16 -0
  129. data/lib/shopify_app/utils.rb +82 -20
  130. data/lib/shopify_app/version.rb +1 -1
  131. data/lib/shopify_app.rb +12 -3
  132. data/package.json +5 -6
  133. data/service.yml +0 -2
  134. data/shopify_app.gemspec +6 -5
  135. data/translation.yml +1 -0
  136. data/yarn.lock +2139 -3910
  137. metadata +78 -58
  138. data/.github/workflows/stale.yml +0 -31
  139. data/app/assets/images/storage_access.svg +0 -1
  140. data/app/assets/javascripts/shopify_app/app_bridge_3.1.1.js +0 -10
  141. data/app/assets/javascripts/shopify_app/app_bridge_redirect.js +0 -22
  142. data/app/assets/javascripts/shopify_app/app_bridge_utils_3.1.1.js +0 -1
  143. data/app/assets/javascripts/shopify_app/enable_cookies.js +0 -3
  144. data/app/assets/javascripts/shopify_app/itp_helper.js +0 -40
  145. data/app/assets/javascripts/shopify_app/partition_cookies.js +0 -8
  146. data/app/assets/javascripts/shopify_app/post_redirect.js +0 -9
  147. data/app/assets/javascripts/shopify_app/request_storage_access.js +0 -3
  148. data/app/assets/javascripts/shopify_app/storage_access.js +0 -148
  149. data/app/assets/javascripts/shopify_app/storage_access_redirect.js +0 -17
  150. data/app/assets/javascripts/shopify_app/top_level.js +0 -2
  151. data/app/assets/javascripts/shopify_app/top_level_interaction.js +0 -11
  152. data/app/controllers/concerns/shopify_app/authenticated.rb +0 -19
  153. data/app/controllers/concerns/shopify_app/require_known_shop.rb +0 -48
  154. data/app/views/shopify_app/sessions/enable_cookies.html.erb +0 -70
  155. data/app/views/shopify_app/sessions/request_storage_access.html.erb +0 -68
  156. data/app/views/shopify_app/sessions/top_level_interaction.html.erb +0 -63
  157. data/app/views/shopify_app/shared/post_redirect_to_auth_shopify.html.erb +0 -13
  158. data/docs/shopify_app/script-tags.md +0 -28
  159. data/docs/shopify_app/session-repository.md +0 -88
  160. data/lib/generators/shopify_app/add_marketing_activity_extension/add_marketing_activity_extension_generator.rb +0 -41
  161. data/lib/generators/shopify_app/add_marketing_activity_extension/templates/marketing_activities_controller.rb +0 -62
  162. data/lib/shopify_app/controller_concerns/itp.rb +0 -45
  163. data/lib/shopify_app/jobs/scripttags_manager_job.rb +0 -16
  164. data/lib/shopify_app/managers/scripttags_manager.rb +0 -84
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 818a15b2d9822d6cf785722387873d805ca1709f9c4bec394e4481a0a7e8f70e
4
- data.tar.gz: 0701e46e9492f2d387abbc1d2b2ef3c33a20b6196df340c353c6e6ddadc48cbe
3
+ metadata.gz: d8a8d6fb5b227bbe3070fba9050497eb007e4191a782bc89b12a84546470ed65
4
+ data.tar.gz: 5f8d8e4486585b07a93ad7f6abddaebde7a263568dc78e757627476aba37d38b
5
5
  SHA512:
6
- metadata.gz: 60f33ceb026c9684efbfe16d638f822a7ea82f9c4a24346a4ca3ddd6c525bfd6819913ea8fd3ac2c5aa7979d053dddf45fa5496c028d26f7a30e4dd2dd8d1b1c
7
- data.tar.gz: b2c1fba3d38554e357d77e6c75348af9ade64e70e8aacb9bc9910a6e07c4eb8d69fa29e694abda00a25e7e836445a3f31eba2f8e88299f4d0a689ea70a99b7f7
6
+ metadata.gz: 2a0b7ad073c42b6fbe5033aa686fa365050d8d56305507746b15f938a1511e979eecd49dcaefbe2793114c6ca4c4ef4f986085b743651115dc816faab404da15
7
+ data.tar.gz: a8896ed834816ef8fd35f17db67aef3efcd401fa2a46900e2a2bce8d5b96f863db3eaa0335e73d63b6c48e6382d52d9103c46fce7a7252568e1abe7e503d2075
data/.github/CODEOWNERS CHANGED
@@ -1,2 +1,3 @@
1
1
  * @shopify/platform-dev-tools-education
2
2
  * @shopify/app-foundations
3
+ * @Shopify/client-libraries-app-templates
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: '📈 Enhancement'
3
+ about: Enhancement to our codebase that isn't a adding or changing a feature
4
+ labels: 'Type: Enhancement 📈'
5
+ ---
6
+
7
+ ## Overview/summary
8
+
9
+ <!-- Write a short description of the enhancement here ↓ -->
@@ -1,63 +1,46 @@
1
1
  ---
2
- name: Bug report
3
- about: Report a technical issue with the Shopify App gem.
4
- labels: bug
2
+ name: "🐛 Bug Report"
3
+ about: Something isn't working
4
+ labels: "Type: Bug 🐛"
5
5
  ---
6
6
 
7
- <!--
8
-
9
- Do you want to ask a question? Are you looking for support? The Shopify Community forum is the best place for getting support: https://community.shopify.com
7
+ # Issue summary
10
8
 
11
- You can also join the Partners Slack Community group: https://www.shopify.com/partners/community#conversation
9
+ Before opening this issue, I have:
12
10
 
13
- Authentication Issues: A great deal of the issues surrounding this repo are around authenticating (installing) the generated app with Shopify.
11
+ - [ ] Upgraded to the latest version of the package
12
+ - `shopify_app` version:
13
+ - Ruby version:
14
+ - Operating system:
15
+ - [ ] Set `log_level: :debug` [in my configuration](https://github.com/Shopify/shopify-api-ruby#setup-shopify-context), if applicable
16
+ - [ ] Found a reliable way to reproduce the problem that indicates it's a problem with the package
17
+ - [ ] Looked for similar issues in this repository
18
+ - [ ] Checked that this isn't an issue with a Shopify API
19
+ - If it is, please create a post in the [Shopify community forums](https://community.shopify.com/c/partners-and-developers/ct-p/appdev) or report it to [Shopify Partner Support](https://help.shopify.com/en/support/partners/org-select)
14
20
 
15
- If you are experiencing issues with your app authenticating/installing the best way to get help fast is to create a repo with the minimal amount of code to demonstrate the issue and a clearly documented set of steps you took to arrive there. This will help us solve your problem quicker since we won't need to spend any time figuring out how to reproduce the bug. Please also include your operating system and browser.
21
+ <!--
22
+ Write a short description of the issue here.
16
23
 
24
+ We can only fix issues for which there is a clear reproduction scenario.
25
+ The more context you can provide, the easier it becomes for us to investigate and fix the issue.
17
26
  -->
18
27
 
19
- ### Description
20
-
21
- <!-- Description of the issue -->
22
-
23
- ### Steps to Reproduce
24
-
25
- 1. <!-- First Step -->
26
- 2. <!-- Second Step -->
27
- 3. <!-- and so on… -->
28
-
29
- **Expected behavior:**
30
-
31
- <!-- What you expect to happen -->
32
-
33
- **Actual behavior:**
34
-
35
- <!-- What actually happens -->
36
-
37
- **Reproduces how often:**
38
-
39
- <!-- What percentage of the time does it reproduce? -->
40
-
41
- ### Browsers
42
-
43
- <!-- Please specify the browser(s) you have tested that exhibit this behaviour. -->
44
-
45
- ### Gem versions
46
-
47
- <!-- Please specify which version(s) of the gem exhibit this behaviour. -->
48
-
49
- ### Additional Information
28
+ ## Expected behavior
50
29
 
51
- <!-- Any additional information, configuration or data that might be necessary to reproduce the issue. See common examples of important information below. -->
30
+ What do you think should happen?
52
31
 
53
- <!-- - [x] My app relies on third-party cookies -->
54
- <!-- - [x] My app is intended to be a non-embedded app -->
55
- <!-- - [x] My app uses session tokens -->
32
+ ## Actual behavior
56
33
 
34
+ What actually happens?
57
35
 
58
- ### Security
36
+ ## Steps to reproduce the problem
59
37
 
60
- <!-- Please be certain to redact any private information from your logs or code snippets such as Api Keys, Api Secrets, and any authentication tokens such as shop_tokens. -->
38
+ 1.
39
+ 1.
40
+ 1.
61
41
 
62
- - [ ] I have redacted any private information from my logs or code snippets.
42
+ ## Debug logs
63
43
 
44
+ ```
45
+ // Paste any relevant logs here
46
+ ```
@@ -1,33 +1,9 @@
1
1
  ---
2
- name: Feature request
3
- about: Request new functionality for the Shopify App gem.
4
- labels: feature request
2
+ name: "🙌 Feature Request"
3
+ about: Suggest a new feature, or changes to an existing one
4
+ labels: "Type: Feature Request :raised_hands:"
5
5
  ---
6
6
 
7
- <!--
7
+ ## Overview
8
8
 
9
- Do you want to ask a question? Are you looking for support? The Shopify Community forum is the best place for getting support: https://community.shopify.com
10
-
11
- You can also join the Partners Slack Community group: https://www.shopify.com/partners/community#conversation
12
-
13
- ---
14
-
15
- Please note that the team that maintains this gem has finite resources so it's unlikely that we'll work on feature requests. If we're interested in a particular feature however, we'll follow up and ask for more detail.
16
-
17
- -->
18
-
19
- ### Summary
20
-
21
- <!-- One paragraph explanation of the feature or suggestions. -->
22
-
23
- ### Motivation
24
-
25
- <!-- Why is this feature or suggestion needed? What is the expected outcome? -->
26
-
27
- ### Describe alternatives you've considered
28
-
29
- <!-- A clear and concise description of the alternative solutions you've considered. -->
30
-
31
- ### Additional context
32
-
33
- <!-- Add any other context or screenshots about the feature request here. -->
9
+ <!-- Write a short description of the request here -->
@@ -12,12 +12,12 @@ jobs:
12
12
  name: Ruby ${{ matrix.version }}
13
13
  strategy:
14
14
  matrix:
15
- version: ['2.7', '3.0']
15
+ version: ['3.0', '3.1', '3.2', '3.3']
16
16
 
17
17
  steps:
18
- - uses: actions/checkout@v2
18
+ - uses: actions/checkout@v3
19
19
  - name: Cache node modules
20
- uses: actions/cache@v2
20
+ uses: actions/cache@v3
21
21
  with:
22
22
  # npm cache files are stored in `~/.npm` on Linux/macOS
23
23
  path: ~/.npm
@@ -28,13 +28,12 @@ jobs:
28
28
  ruby-version: ${{ matrix.version }}
29
29
  bundler-cache: true
30
30
  - name: Set up Node
31
- uses: actions/setup-node@v2-beta
31
+ uses: actions/setup-node@v3
32
32
  with:
33
- node-version: '12'
34
- - name: Install Dependencies
35
- run: |
36
- yarn
37
- - name: Run Tests
38
- run: |
39
- yarn test
40
- bundle exec rake test
33
+ node-version: '18'
34
+ - name: Install Yarn Dependencies
35
+ run: yarn
36
+ - name: Run Yarn Tests
37
+ run: yarn test
38
+ - name: Run Ruby Tests
39
+ run: bundle exec rake test
@@ -11,8 +11,8 @@ jobs:
11
11
  steps:
12
12
  - name: Extract tag name
13
13
  id: tag
14
- run: echo "::set-output name=value::${GITHUB_REF##*/}"
15
- - uses: actions/checkout@v2
14
+ run: echo "value=${GITHUB_REF##*/}" >> "$GITHUB_OUTPUT"
15
+ - uses: actions/checkout@v3
16
16
 
17
17
  - name: Create Release
18
18
  id: create_release
@@ -7,7 +7,7 @@ jobs:
7
7
  remove-labels-on-activity:
8
8
  runs-on: ubuntu-latest
9
9
  steps:
10
- - uses: actions/checkout@v2
10
+ - uses: actions/checkout@v3
11
11
  - uses: actions-ecosystem/action-remove-labels@v1
12
12
  if: contains(github.event.issue.labels.*.name, 'Waiting for Response')
13
13
  with:
@@ -7,11 +7,10 @@ jobs:
7
7
  runs-on: ubuntu-latest
8
8
 
9
9
  steps:
10
- - uses: actions/checkout@v2
11
- - name: Set up Ruby 2.7
10
+ - uses: actions/checkout@v3
11
+ - name: Set up Ruby
12
12
  uses: ruby/setup-ruby@v1
13
13
  with:
14
- ruby-version: 2.7
15
14
  bundler-cache: true
16
15
  - name: Install gems
17
16
  run: |
data/.nvmrc CHANGED
@@ -1 +1 @@
1
- 12.22.8
1
+ 20.10.0
data/.rubocop.yml CHANGED
@@ -2,7 +2,6 @@ inherit_gem:
2
2
  rubocop-shopify: rubocop.yml
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 2.7
6
5
  Exclude:
7
6
  - 'test/tmp/**/*'
8
7
  - 'vendor/bundle/**/*'
@@ -16,3 +15,5 @@ Style/ClassAndModuleChildren:
16
15
  Exclude:
17
16
  - 'test/**/*'
18
17
 
18
+ Style/ClassMethodsDefinitions:
19
+ Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.0.3
1
+ 3.2.2
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+
3
+ # This file exists to prevent the Spin infrastucture from infering that this is a Rails application:
4
+ # https://github.com/Shopify/wave/issues/244
5
+
6
+ set -ex
7
+
8
+ bundle install
data/CHANGELOG.md CHANGED
@@ -1,6 +1,179 @@
1
1
  Unreleased
2
2
  ----------
3
3
 
4
+ 22.5.0 (November 28, 2024)
5
+ ----------
6
+ - Add support for filters in webhook registration [1923](https://github.com/Shopify/shopify_app/pull/1923)
7
+ - Make `ShopifyApp.configuration.scope` default to empty list `[]` [1913](https://github.com/Shopify/shopify_app/pull/1913)
8
+
9
+ 22.4.0 (August 22, 2024)
10
+ ----------
11
+ - Add the `unified_admin_domain` configuration option for the unified admin domain.
12
+ - Add new generators for webhook subscriptions defined in the `shopify.app.toml` file [1882](https://github.com/Shopify/shopify_app/pull/1882)
13
+ - Fix test stubbing for Token Exchange auth [1897](https://github.com/Shopify/shopify_app/pull/1897)
14
+
15
+ 22.3.1 (July 26, 2024)
16
+ ----------
17
+ - Handle edge case where we attempted to redirect to login when already at the top level [#1887](https://github.com/Shopify/shopify_app/pull/1887)
18
+
19
+ 22.3.0 (July 24, 2024)
20
+ ----------
21
+ - Deprecate `ShopifyApp::JWTMiddleware`. And remove internal usage. Any existing app code relying on decoded JWT contents set from `request.env` should instead include the `WithShopifyIdToken` concern and call its respective methods. [#1861](https://github.com/Shopify/shopify_app/pull/1861) [Migration Guide](/docs/Upgrading.md#v2300---removed-shopifyappjwtmiddleware)
22
+ - Handle scenario when invalid URI is passed to `sanitize_shop_domain` [#1852](https://github.com/Shopify/shopify_app/pull/1852)
23
+ - Remove references to old JS files during asset precompile [#1865](https://github.com/Shopify/shopify_app/pull/1865)
24
+ - Remove old translation keys for `enable_cookies_*`, `top_level_interaction_*` and `request_storage_access_*` [#1865](https://github.com/Shopify/shopify_app/pull/1865)
25
+ - Add invalid id token handling for `current_shopify_domain` method [#1868](https://github.com/Shopify/shopify_app/pull/1868)
26
+ - Keep original path and params when redirecting deep links to embed [#1869](https://github.com/Shopify/shopify_app/pull/1869)
27
+ - Fix managed install path for SPIN environments [#1877](https://github.com/Shopify/shopify_app/pull/1877)
28
+ - Migrate fullpage redirect to App Bridge CDN [#1870](https://github.com/Shopify/shopify_app/pull/1870)
29
+ - Improve embedded requests detection with `Sec-Fetch-Dest` header [#1873](https://github.com/Shopify/shopify_app/pull/1873)
30
+ - Fix bug where locale is not read from session if locale param is not present in app request [#1878](https://github.com/Shopify/shopify_app/pull/1878)
31
+
32
+ 22.2.1 (May 6,2024)
33
+ ----------
34
+ * Patch - Don't delete session on 401 errors during retry in `with_token_refetch` [#1844](https://github.com/Shopify/shopify_app/pull/1844)
35
+
36
+ 22.2.0 (May 2,2024)
37
+ ----------
38
+ * Add new zero redirect authorization strategy - `Token Exchange`.
39
+ - This strategy replaces the existing OAuth flow for embedded apps and remove the redirects that were previously necessary to complete OAuth.
40
+ See ["New embedded app authorization strategy (Token Exchange)"](/README.md/#new-embedded-app-authorization-strategy-token-exchange) for how to enable this feature.
41
+ - Related PRs: [#1817](https://github.com/Shopify/shopify_app/pull/1817),
42
+ [#1818](https://github.com/Shopify/shopify_app/pull/1818),
43
+ [#1819](https://github.com/Shopify/shopify_app/pull/1819),
44
+ [#1821](https://github.com/Shopify/shopify_app/pull/1821),
45
+ [#1822](https://github.com/Shopify/shopify_app/pull/1822),
46
+ [#1823](https://github.com/Shopify/shopify_app/pull/1823),
47
+ [#1832](https://github.com/Shopify/shopify_app/pull/1832),
48
+ [#1833](https://github.com/Shopify/shopify_app/pull/1833),
49
+ [#1834](https://github.com/Shopify/shopify_app/pull/1834),
50
+ [#1836](https://github.com/Shopify/shopify_app/pull/1836),
51
+ * Bumps `shopify_api` to `14.3.0` [1832](https://github.com/Shopify/shopify_app/pull/1832)
52
+ * Support `id_token` from URL param [1832](https://github.com/Shopify/shopify_app/pull/1832)
53
+ * Extracted controller concern `WithShopifyIdToken`
54
+ * This concern provides a method `shopify_id_token` to retrieve the Shopify Id token from either the authorization header or the URL param `id_token`.
55
+ * `ShopifyApp::JWTMiddleware` supports retrieving session token from URL param `id_token`
56
+ * `ShopifyApp::JWTMiddleware` returns early if the app is not embedded to avoid unnecessary JWT verification
57
+ * `LoginProtection` now uses `WithShopifyIdToken` concern to retrieve the Shopify Id token, thus accepting the session token from the URL param `id_token`
58
+ * Marking `ShopifyApp::JWT` to be deprecated in version 23.0.0 [1832](https://github.com/Shopify/shopify_app/pull/1832), use `ShopifyAPI::Auth::JwtPayload` instead.
59
+ * Fix infinite redirect loop caused by handling errors from Billing API [1833](https://github.com/Shopify/shopify_app/pull/1833)
60
+
61
+ 22.1.0 (April 9,2024)
62
+ ----------
63
+ * Extracted class - `PostAuthenticateTasks` to handle post authenticate tasks. To learn more, see [post authenticate tasks](/docs/shopify_app/authentication.md#post-authenticate-tasks). [1819](https://github.com/Shopify/shopify_app/pull/1819)
64
+ * Bumps shopify_api dependency to 14.1.0 [1826](https://github.com/Shopify/shopify_app/pull/1826)
65
+
66
+ 22.0.1 (March 12, 2024)
67
+ ----------
68
+ * Bumps `shopify_api` to `14.0.1` [1813](https://github.com/Shopify/shopify_app/pull/1813)
69
+
70
+ 22.00.0 (March 5, 2024)
71
+ ----------
72
+
73
+ To migrate from a previous version, please see the [v22 migration guide](docs/Upgrading.md#upgrading-to-v2200).
74
+
75
+ * ⚠️ [Breaking] Bumps minimum supported Ruby version to 3.0. Bumps `shopify_api` to 14.0 [1801](https://github.com/Shopify/shopify_app/pull/1801)
76
+ * ⚠️ [Breaking] Removes deprecated controller concerns that were renamed in `v21.10.0`. [1805](https://github.com/Shopify/shopify_app/pull/1805)
77
+ * ⚠️ [Breaking] Removes deprecated `ScripttagManager`. We realize there was communication error in our logging where we logged future deprecation instead of our inteded removal. Since we have been logging that for 2 years we felt we'd move forward with the removal instead pushing this off until the next major release. [1806](https://github.com/Shopify/shopify_app/pull/1806)
78
+ * ⚠️ [Breaking] Removes ITP controller concern and `browser_sniffer` dependency.[1810](https://github.com/Shopify/shopify_app/pull/1810)
79
+ * ⚠️ [Breaking] Removes Marketing Extensions generator [1810](https://github.com/Shopify/shopify_app/pull/1810)
80
+ * ⚠️ [Breaking] Thows an error if a controller includes incompatible concerns (LoginProtection/EnsureInstalled) [1809](https://github.com/Shopify/shopify_app/pull/1809)
81
+ * ⚠️ [Breaking] No longer rescues non-shopify API errors during OAuth
82
+ callback [1807](https://github.com/Shopify/shopify_app/pull/1807)
83
+ * Make type param for webhooks route optional. This will fix a bug with CLI initiated webhooks.[1786](https://github.com/Shopify/shopify_app/pull/1786)
84
+ * Fix redirecting to login when we catch a 401 response from Shopify, so that it can also handle cases where the app is already embedded when that happens.[1787](https://github.com/Shopify/shopify_app/pull/1787)
85
+ * Always register webhooks with offline sessions.[1788](https://github.com/Shopify/shopify_app/pull/1788)
86
+
87
+ 21.10.0 (January 24, 2024)
88
+ ----------
89
+ * Fix session deletion for users with customized session storage[#1773](https://github.com/Shopify/shopify_app/pull/1773)
90
+ * Add configuration flag `check_session_expiry_date` to trigger a re-auth when the (user) session is expired. The session expiry date must be stored and retrieved for this flag to be effective. When the `UserSessionStorageWithScopes` concern is used, a DB migration can be generated with `rails generate shopify_app:user_model --skip` and should be applied before enabling that flag[#1757](https://github.com/Shopify/shopify_app/pull/1757)
91
+
92
+ 21.9.0 (January 16, 2024)
93
+ ----------
94
+ * Fix `add_webhook` generator to create the webhook jobs under the correct directory[#1748](https://github.com/Shopify/shopify_app/pull/1748)
95
+ * Add support for metafield_namespaces in webhook registration [#1745](https://github.com/Shopify/shopify_app/pull/1745)
96
+ * Bumps `shopify_api` to latest version (13.4.0), adds support for 2024-01 API version [#1776](https://github.com/Shopify/shopify_app/pull/1776)
97
+
98
+ 21.8.1 (December 6, 2023)
99
+ ----------
100
+ * Bump `shopify_api` to 13.3.1 [1763](https://github.com/Shopify/shopify-api-ruby/blob/main/CHANGELOG.md#1331)
101
+
102
+ 21.8.0 (Dec 1, 2023)
103
+ ----------
104
+ * Bump `shopify_api` to include bugfix with mandatory webhooks + fixes for CI failures that prevented earlier release
105
+ * Fixes bug with `WebhooksManager#recreate_webhooks!` where we failed to register topics in the registry[#1743](https://github.com/Shopify/shopify_app/pull/1704)
106
+ * Allow embedded apps to provide a full URL to get redirected to, rather than defaulting to Shopify Admin [#1746](https://github.com/Shopify/shopify_app/pull/1746)
107
+
108
+ 21.7.0 (Oct 12, 2023)
109
+ ----------
110
+ * Fixes typo in webhook generator [#1704](https://github.com/Shopify/shopify_app/pull/1704)
111
+ * Fix registration of event_bridge and pub_sub webhooks [#1635](https://github.com/Shopify/shopify_app/pull/1635)
112
+ * Adds support for adding any number of trial days within `EnsureBilling` by adding the `trial_days` field to `BillingConfiguration`
113
+ * Updated AppBridge to 3.7.8 [#1680](https://github.com/Shopify/shopify_app/pull/1680)
114
+ * Support falling back to 2 letter language code locales [#1711](https://github.com/Shopify/shopify_app/pull/1711)
115
+ * Fix locale leaks across requests [#1711](https://github.com/Shopify/shopify_app/pull/1711)
116
+ * Fix bug in `InMemoryUserSessionStore#store`, this can now be used out of box. [#1716](https://github.com/Shopify/shopify_app/pull/1716)
117
+ * Adds support for 2023-10 API version [#1734](https://github.com/Shopify/shopify_app/pull/1734)
118
+
119
+ 21.6.0 (July 11, 2023)
120
+ ----------
121
+ * Adds support for toggling test charges within `EnsureBilling` by adding `test` field to `BillingConfiguration` and pulling in environment variable [#1688](https://github.com/Shopify/shopify_app/pull/1688)
122
+ * Adds support for 2023-07 API version [#1706](https://github.com/Shopify/shopify_app/pull/1706)
123
+
124
+ 21.5.0 (May 18, 2023)
125
+ ----------
126
+ * Support Unified Admin [#1658](https://github.com/Shopify/shopify_app/pull/1658)
127
+ * Set `access_scopes` column to string by default [#1636](https://github.com/Shopify/shopify_app/pull/1636)
128
+ * Fixes a bug with `EnsureBilling` causing infinite redirect in embedded apps [#1578](https://github.com/Shopify/shopify_app/pull/1578)
129
+ * Modifies SessionStorage#with_shopify_session to call a block with a supplied session instance [#1488](https://github.com/Shopify/shopify_app/pull/1488)
130
+ * Refactors `ShopifyApp::WebhhooksManager#recreate_webhooks!` to have a uniform webhook inventory that doesn't clash with the API library. Updates webhook generator to use supplied session. [#1686](https://github.com/Shopify/shopify_app/pull/1686)
131
+ * No longer use session repository from API library[#1689](https://github.com/Shopify/shopify_app/pull/1689)
132
+
133
+ 21.4.1 (Feb 21, 2023)
134
+ ----------
135
+ * Fixed bug where authentication redirect could still happen even though `reauth_on_access_scope_changes` is set to `false` [#1639](https://github.com/Shopify/shopify_app/pull/1639)
136
+
137
+ 21.4.0 (Jan 5, 2023)
138
+ ----------
139
+ * Updated shopify_api to 12.4.0 [#1633](https://github.com/Shopify/shopify_app/pull/1633)
140
+ * Removed Logged output for rescued JWT exceptions [#1610](https://github.com/Shopify/shopify_app/pull/1610)
141
+ * Fixes a bug with `ShopifyApp::WebhooksManager.destroy_webhooks` causing not passing session arguments to [unregister](https://github.com/Shopify/shopify-api-ruby/blob/main/lib/shopify_api/webhooks/registry.rb#L99) method [#1569](https://github.com/Shopify/shopify_app/pull/1569)
142
+ * Validates shop's offline session token is still valid when using `EnsureInstalled`[#1612](https://github.com/Shopify/shopify_app/pull/1612)
143
+ * Allows use of multiple subdomains with myshopify_domain [#1620](https://github.com/Shopify/shopify_app/pull/1620)
144
+ * Added a `setup_shopify_session` test helper to stub a valid session
145
+
146
+ 21.3.1 (Dec 12, 2022)
147
+ ----------
148
+ * Fix bug with stores using the new unified admin that were falsely being flagged as phishing attempts [#1608](https://github.com/Shopify/shopify_app/pull/1608)
149
+
150
+ 21.3.0 (Dec 9, 2022)
151
+ ----------
152
+ * Move covered scopes check into user access strategy [#1600](https://github.com/Shopify/shopify_app/pull/1600)
153
+ * Add configuration option for user access strategy [#1599](https://github.com/Shopify/shopify_app/pull/1599)
154
+ * Fixes a bug with `EnsureAuthenticatedLinks` causing deep links to not work [#1549](https://github.com/Shopify/shopify_app/pull/1549)
155
+ * Ensure online token is properly used when using `current_shopify_session` [#1566](https://github.com/Shopify/shopify_app/pull/1566)
156
+ * Added debug logs, you can read more about logging [here](./docs/logging.md). [#1545](https://github.com/Shopify/shopify_app/pull/1545)
157
+ * Emit a deprecation notice for wrongly-rescued exceptions [#1530](https://github.com/Shopify/shopify_app/pull/1530)
158
+ * Log a deprecation warning for the use of incompatible controller concerns [#1560](https://github.com/Shopify/shopify_app/pull/1560)
159
+ * Fixes bug with expired sessions for embedded apps returning a 500 instead of 401 [#1580](https://github.com/Shopify/shopify_app/pull/1580)
160
+ * Generator properly handles uninstall [#1597](https://github.com/Shopify/shopify_app/pull/1597)
161
+ * Move ownership for session persistence from library to this gem [#1563](https://github.com/Shopify/shopify_app/pull/1563)
162
+ * Patch phishing vulnerability [#1605](https://github.com/Shopify/shopify_app/pull/1605)
163
+ * Remove `Itp` from `LoginProtection`. See the [upgrading docs](https://github.com/Shopify/shopify_app/blob/main/docs/Upgrading.md) for more information. [#1604](https://github.com/Shopify/shopify_app/pull/1604)
164
+
165
+ 21.2.0 (Oct 25, 2022)
166
+ ----------
167
+ * Pass access scopes on query string [#1540](https://github.com/Shopify/shopify_app/pull/1540)
168
+
169
+ 21.1.1 (Oct 20, 2022)
170
+ ----------
171
+ * Updates dependency to `shopify_api` to 12.2 to fix error with host_name argument.
172
+
173
+ 21.1.0 (Oct 17, 2022)
174
+ ----------
175
+ * Removes assumed `https` required to run locally. Support both `http` and `https` in backward compatible way. [#1518](https://github.com/Shopify/shopify_app/pull/1518)
176
+
4
177
  21.0.0 (Oct 3, 2022)
5
178
  ----------
6
179
  * Updating shopify_api gem to 12.0.0
@@ -17,14 +190,12 @@ Unreleased
17
190
 
18
191
  20.1.1 (September 2, 2022)
19
192
  ----------
20
-
21
193
  * Fixed an issue where the `embedded_redirect_url` could lead to a redirect loop in server-side rendered (or production) apps. [#1497](https://github.com/Shopify/shopify_app/pull/1497)
22
194
  * Fixes bug where webhooks were generated with addresses instead of the [path the Ruby API](https://github.com/Shopify/shopify-api-ruby/blob/7a08ae9d96a7a85abd0113dae4eb76398cba8c64/lib/shopify_api/webhooks/registrations/http.rb#L12) is expecting [#1474](https://github.com/Shopify/shopify_app/pull/1474). The breaking change that was accidentially already shipped was that `address` attribute for webhooks should be paths not addresses with `https://` and the host name. While the `address` attribute name will still work assuming the value is a path, this name is deprecated. Please configure webhooks with the `path` attribute name instead.
23
195
  * Deduce webhook path from deprecated webhook address if initializer uses address attribute. This makes this attribute change a non-breaking change for those upgrading.
24
196
 
25
197
  20.1.0 (August 22, 2022)
26
198
  ----------
27
-
28
199
  * Set the appropriate CSP `frame-ancestor` directive in controllers using the `EmbeddedApp` concern. [#1474](https://github.com/Shopify/shopify_app/pull/1474)
29
200
  * Allow [Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/trycloudflare/) hosts in `config/environments/development.rb`.
30
201
  * Use [Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/trycloudflare/) as example tunnel in readme/docs.
@@ -32,30 +203,25 @@ Unreleased
32
203
 
33
204
  20.0.2 (July 7, 2022)
34
205
  ----------
35
-
36
206
  * Bump [Shopify API](https://github.com/Shopify/shopify-api-ruby) to version 11.0.1. It includes [these updates](https://github.com/Shopify/shopify-api-ruby/blob/main/CHANGELOG.md#version-1101). Fix an issue where HMAC signature verification would fail in OAuth flows during API key rotation.
37
207
 
38
208
  20.0.1 (July 6, 2022)
39
209
  ----------
40
-
41
210
  * Accept extra keyword arguments to WebhooksManagerJob to ease upgrade path from v18 or older (https://github.com/Shopify/shopify_app/pull/1466)
42
211
 
43
212
  20.0.0 (July 4, 2022)
44
213
  ----------
45
-
46
214
  * Bump [Shopify API](https://github.com/Shopify/shopify-api-ruby) to version 11.0.0. It includes [these updates](https://github.com/Shopify/shopify-api-ruby/blob/main/CHANGELOG.md#version-1100). The breaking change relates to the removal of API version `2021-07` support.
47
215
  * Internal update, adding App Bridge 3 for redirect (only). [#1458](https://github.com/Shopify/shopify_app/pull/1458)
48
216
 
49
217
  19.1.0 (June 20, 2022)
50
218
  ----------
51
-
52
219
  * Add the `login_callback_url` config to allow overwriting that route as well, and mount the engine routes based on the configurations. [#1445](https://github.com/Shopify/shopify_app/pull/1445)
53
220
  * Add special headers when returning 401s from LoginProtection. [#1450](https://github.com/Shopify/shopify_app/pull/1450)
54
221
  * Add a new `billing` configuration which takes in a `ShopifyApp::BillingConfiguration` object and checks for payment on controllers with `Authenticated`. [#1455](https://github.com/Shopify/shopify_app/pull/1455)
55
222
 
56
223
  19.0.2 (April 27, 2022)
57
224
  ----------
58
-
59
225
  * Fix regression in apps using online tokens. [#1413](https://github.com/Shopify/shopify_app/pull/1413)
60
226
  * Bump [Shopify API](https://github.com/Shopify/shopify-api-ruby) to version 10.0.3. It includes [these fixes](https://github.com/Shopify/shopify-api-ruby/blob/main/CHANGELOG.md#version-1003).
61
227
 
@@ -0,0 +1,46 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, and in the interest of
4
+ fostering an open and welcoming community, we pledge to respect all
5
+ people who contribute through reporting issues, posting feature
6
+ requests, updating documentation, submitting pull requests or patches,
7
+ and other activities.
8
+
9
+ We are committed to making participation in this project a
10
+ harassment-free experience for everyone, regardless of level of
11
+ experience, gender, gender identity and expression, sexual orientation,
12
+ disability, personal appearance, body size, race, ethnicity, age,
13
+ religion, or nationality.
14
+
15
+ Examples of unacceptable behavior by participants include:
16
+
17
+ - The use of sexualized language or imagery
18
+ - Personal attacks
19
+ - Trolling or insulting/derogatory comments
20
+ - Public or private harassment
21
+ - Publishing other's private information, such as physical or electronic
22
+ addresses, without explicit permission
23
+ - Other unethical or unprofessional conduct
24
+
25
+ Project maintainers have the right and responsibility to remove, edit,
26
+ or reject comments, commits, code, wiki edits, issues, and other
27
+ contributions that are not aligned to this Code of Conduct, or to ban
28
+ temporarily or permanently any contributor for other behaviors that they
29
+ deem inappropriate, threatening, offensive, or harmful.
30
+
31
+ By adopting this Code of Conduct, project maintainers commit themselves
32
+ to fairly and consistently applying these principles to every aspect of
33
+ managing this project. Project maintainers who do not follow or enforce
34
+ the Code of Conduct may be permanently removed from the project team.
35
+
36
+ This Code of Conduct applies both within project spaces and in public
37
+ spaces when an individual is representing the project or its community.
38
+
39
+ Instances of abusive, harassing, or otherwise unacceptable behavior may
40
+ be reported by contacting a project maintainer at <opensource@shopify.com>.
41
+ All complaints will be reviewed and investigated and will result in a response
42
+ that is deemed necessary and appropriate to the circumstances. Maintainers are
43
+ obligated to maintain confidentiality with regard to the reporter of an incident.
44
+
45
+ This Code of Conduct is adapted from the Contributor Covenant, version
46
+ 1.3.0, available from http://contributor-covenant.org/version/1/3/0/
data/CONTRIBUTING.md CHANGED
@@ -23,7 +23,7 @@ Shopify has an official message board with dedicated forums to discuss all thing
23
23
  * [Shopify Apps](https://community.shopify.com/c/Shopify-Apps/bd-p/shopify-apps)
24
24
  * [Shopify APIs & SDKs](https://community.shopify.com/c/Shopify-APIs-SDKs/bd-p/shopify-apis-and-technology)
25
25
 
26
- If you prefer to chat instead, join the [Shopify Partners Slack Community group](https://www.shopify.com/partners/community#conversation). This Slack group hosts an active community of thousands of app developers.
26
+ If you prefer to chat instead, join the [Shopify Partners Slack Community group](https://community.shopify.com/c/partners-and-developers/ct-p/appdev). This Slack group hosts an active community of thousands of app developers.
27
27
 
28
28
  By participating in the Community forum or Slack group, you agree to adhere to the forum [Code of Conduct](https://community.shopify.com/c/Announcements/Code-of-Conduct/m-p/491969#M23) outlined.
29
29
 
@@ -61,7 +61,7 @@ If you have a suggestion for the Shopify App gem or a feature request, provide t
61
61
 
62
62
  The process described here has several goals:
63
63
 
64
- * Maintain the Shopify App gem's quality
64
+ * Maintain the Shopify App gem's quality (does the change you're making have a test?)
65
65
  * Fix problems that are important to app developers
66
66
  * Enable a sustainable system for the Shopify App gem's maintainers to review contributions
67
67
 
@@ -74,8 +74,18 @@ Please follow these steps to have your contribution considered by the maintainer
74
74
 
75
75
  While the prerequisites above must be satisfied prior to having your pull request reviewed, the reviewer(s) may ask you to complete additional design work, tests, or other changes before your pull request can be ultimately accepted.
76
76
  </details>
77
-
78
- ### App Bridge client
79
77
 
80
- This gem ships with a UMD version of the App Bridge client. It lives inside the assets folder: `app/assets/javascripts/shopify_app/`. To update the client, simply download the UMD build from [unpkg.com](https://unpkg.com/@shopify/app-bridge) and save it into the folder.
81
- Please follow the convention of including the client version number in the filename. Finally, change the reference to the new App Bridge client inside `app/assets/javascripts/shopify_app/app_bridge_redirect.js`.
78
+ ### Running tests
79
+
80
+ #### Test Environment Requirements
81
+
82
+ To run tests, you'll need to make sure that your development environment is setup correctly. You'll need:
83
+
84
+ * Ruby 3+ is installed on your system
85
+ * Install dependencies with `bundle install`
86
+
87
+ #### Executing Tests
88
+
89
+ * To run all tests: `bundle exec rake test`
90
+ * To run a specific test file: `bundle exec rake test TEST=test/controllers/callback_controller_test.rb`
91
+ * To run a single test: `bundle exec rake test TEST=test/controllers/callback_controller_test.rb:50` where `50` is the line number on or inside the test case.
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ source "https://rubygems.org"
6
6
  gemspec
7
7
 
8
8
  gem "rails-controller-testing", group: :test
9
+ gem "rails", "< 7" # temporary: https://github.com/Shopify/shopify_app/pull/1561
9
10
 
10
11
  group :rubocop do
11
12
  gem "rubocop-shopify", require: false