shopify_app 17.0.5 → 18.0.0
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/.github/CODEOWNERS +1 -0
- data/.github/ISSUE_TEMPLATE/bug-report.md +63 -0
- data/.github/ISSUE_TEMPLATE/config.yml +1 -0
- data/.github/ISSUE_TEMPLATE/feature-request.md +33 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +17 -1
- data/.github/workflows/build.yml +4 -1
- data/CHANGELOG.md +26 -0
- data/CONTRIBUTING.md +76 -0
- data/Gemfile.lock +103 -91
- data/README.md +72 -593
- data/app/controllers/concerns/shopify_app/shop_access_scopes_verification.rb +32 -0
- data/app/controllers/shopify_app/callback_controller.rb +17 -2
- data/app/controllers/shopify_app/sessions_controller.rb +5 -1
- data/app/views/shopify_app/shared/post_redirect_to_auth_shopify.html.erb +21 -0
- data/config/locales/nl.yml +1 -1
- data/docs/Quickstart.md +15 -77
- data/docs/Troubleshooting.md +142 -4
- data/docs/Upgrading.md +126 -0
- data/docs/shopify_app/authentication.md +124 -0
- data/docs/shopify_app/engine.md +82 -0
- data/docs/shopify_app/generators.md +127 -0
- data/docs/shopify_app/handling-access-scopes-changes.md +14 -0
- data/docs/shopify_app/script-tags.md +28 -0
- data/docs/shopify_app/session-repository.md +88 -0
- data/docs/shopify_app/testing.md +38 -0
- data/docs/shopify_app/webhooks.md +72 -0
- data/lib/generators/shopify_app/home_controller/templates/home_controller.rb +10 -0
- 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 +2 -0
- data/lib/generators/shopify_app/install/install_generator.rb +30 -1
- data/lib/generators/shopify_app/install/templates/embedded_app.html.erb +2 -1
- data/lib/generators/shopify_app/install/templates/omniauth.rb +1 -0
- data/lib/generators/shopify_app/install/templates/shopify_app.js +1 -1
- data/lib/generators/shopify_app/install/templates/shopify_app.rb.tt +5 -2
- data/lib/generators/shopify_app/install/templates/shopify_provider.rb.tt +8 -0
- data/lib/generators/shopify_app/shop_model/shop_model_generator.rb +27 -0
- data/lib/generators/shopify_app/shop_model/templates/db/migrate/add_shop_access_scopes_column.erb +5 -0
- data/lib/generators/shopify_app/shop_model/templates/shop.rb +1 -1
- data/lib/generators/shopify_app/shopify_app_generator.rb +1 -1
- data/lib/generators/shopify_app/user_model/templates/db/migrate/add_user_access_scopes_column.erb +5 -0
- data/lib/generators/shopify_app/user_model/templates/user.rb +1 -1
- data/lib/generators/shopify_app/user_model/user_model_generator.rb +27 -0
- data/lib/shopify_app.rb +11 -0
- data/lib/shopify_app/access_scopes/noop_strategy.rb +13 -0
- data/lib/shopify_app/access_scopes/shop_strategy.rb +24 -0
- data/lib/shopify_app/access_scopes/user_strategy.rb +41 -0
- data/lib/shopify_app/configuration.rb +22 -0
- data/lib/shopify_app/controller_concerns/login_protection.rb +10 -3
- data/lib/shopify_app/middleware/same_site_cookie_middleware.rb +1 -1
- data/lib/shopify_app/omniauth/omniauth_configuration.rb +64 -0
- data/lib/shopify_app/session/in_memory_shop_session_store.rb +9 -7
- data/lib/shopify_app/session/in_memory_user_session_store.rb +9 -7
- data/lib/shopify_app/session/shop_session_storage_with_scopes.rb +58 -0
- data/lib/shopify_app/session/user_session_storage_with_scopes.rb +58 -0
- data/lib/shopify_app/utils.rb +12 -0
- data/lib/shopify_app/version.rb +1 -1
- data/package.json +1 -1
- data/service.yml +1 -4
- data/shopify_app.gemspec +5 -4
- data/yarn.lock +22 -22
- metadata +50 -16
- data/.github/ISSUE_TEMPLATE.md +0 -19
- data/docs/install-on-dev-shop.png +0 -0
- data/docs/test-your-app.png +0 -0
- data/lib/generators/shopify_app/install/templates/shopify_provider.rb +0 -20
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ShopifyApp
|
4
|
+
module AccessScopes
|
5
|
+
class UserStrategy
|
6
|
+
class InvalidInput < StandardError; end
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def update_access_scopes?(user_id: nil, shopify_user_id: nil)
|
10
|
+
return update_access_scopes_for_user_id?(user_id) if user_id
|
11
|
+
return update_access_scopes_for_shopify_user_id?(shopify_user_id) if shopify_user_id
|
12
|
+
raise(InvalidInput, '#update_access_scopes? requires user_id or shopify_user_id parameter inputs')
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def update_access_scopes_for_user_id?(user_id)
|
18
|
+
user_access_scopes = user_access_scopes_by_user_id(user_id)
|
19
|
+
configuration_access_scopes != user_access_scopes
|
20
|
+
end
|
21
|
+
|
22
|
+
def update_access_scopes_for_shopify_user_id?(shopify_user_id)
|
23
|
+
user_access_scopes = user_access_scopes_by_shopify_user_id(shopify_user_id)
|
24
|
+
configuration_access_scopes != user_access_scopes
|
25
|
+
end
|
26
|
+
|
27
|
+
def user_access_scopes_by_user_id(user_id)
|
28
|
+
ShopifyApp::SessionRepository.retrieve_user_session(user_id)&.access_scopes
|
29
|
+
end
|
30
|
+
|
31
|
+
def user_access_scopes_by_shopify_user_id(shopify_user_id)
|
32
|
+
ShopifyApp::SessionRepository.retrieve_user_session_by_shopify_user_id(shopify_user_id)&.access_scopes
|
33
|
+
end
|
34
|
+
|
35
|
+
def configuration_access_scopes
|
36
|
+
ShopifyAPI::ApiAccess.new(ShopifyApp.configuration.user_access_scopes)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -9,6 +9,8 @@ module ShopifyApp
|
|
9
9
|
attr_accessor :secret
|
10
10
|
attr_accessor :old_secret
|
11
11
|
attr_accessor :scope
|
12
|
+
attr_writer :shop_access_scopes
|
13
|
+
attr_writer :user_access_scopes
|
12
14
|
attr_accessor :embedded_app
|
13
15
|
alias_method :embedded_app?, :embedded_app
|
14
16
|
attr_accessor :webhooks
|
@@ -16,6 +18,8 @@ module ShopifyApp
|
|
16
18
|
attr_accessor :after_authenticate_job
|
17
19
|
attr_accessor :api_version
|
18
20
|
|
21
|
+
attr_accessor :reauth_on_access_scope_changes
|
22
|
+
|
19
23
|
# customise urls
|
20
24
|
attr_accessor :root_url
|
21
25
|
attr_writer :login_url
|
@@ -70,6 +74,16 @@ module ShopifyApp
|
|
70
74
|
ShopifyApp::SessionRepository.shop_storage
|
71
75
|
end
|
72
76
|
|
77
|
+
def shop_access_scopes_strategy
|
78
|
+
return ShopifyApp::AccessScopes::NoopStrategy unless reauth_on_access_scope_changes
|
79
|
+
ShopifyApp::AccessScopes::ShopStrategy
|
80
|
+
end
|
81
|
+
|
82
|
+
def user_access_scopes_strategy
|
83
|
+
return ShopifyApp::AccessScopes::NoopStrategy unless reauth_on_access_scope_changes
|
84
|
+
ShopifyApp::AccessScopes::UserStrategy
|
85
|
+
end
|
86
|
+
|
73
87
|
def has_webhooks?
|
74
88
|
webhooks.present?
|
75
89
|
end
|
@@ -81,6 +95,14 @@ module ShopifyApp
|
|
81
95
|
def enable_same_site_none
|
82
96
|
!Rails.env.test? && (@enable_same_site_none.nil? ? embedded_app? : @enable_same_site_none)
|
83
97
|
end
|
98
|
+
|
99
|
+
def shop_access_scopes
|
100
|
+
@shop_access_scopes || scope
|
101
|
+
end
|
102
|
+
|
103
|
+
def user_access_scopes
|
104
|
+
@user_access_scopes || scope
|
105
|
+
end
|
84
106
|
end
|
85
107
|
|
86
108
|
def self.configuration
|
@@ -9,6 +9,8 @@ module ShopifyApp
|
|
9
9
|
|
10
10
|
class ShopifyDomainNotFound < StandardError; end
|
11
11
|
|
12
|
+
class ShopifyHostNotFound < StandardError; end
|
13
|
+
|
12
14
|
included do
|
13
15
|
after_action :set_test_cookie
|
14
16
|
rescue_from ActiveResource::UnauthorizedAccess, with: :close_session
|
@@ -103,6 +105,12 @@ module ShopifyApp
|
|
103
105
|
request.env['jwt.shopify_user_id']
|
104
106
|
end
|
105
107
|
|
108
|
+
def host
|
109
|
+
return params[:host] if params[:host].present?
|
110
|
+
|
111
|
+
raise ShopifyHostNotFound
|
112
|
+
end
|
113
|
+
|
106
114
|
def redirect_to_login
|
107
115
|
if request.xhr?
|
108
116
|
head(:unauthorized)
|
@@ -215,9 +223,8 @@ module ShopifyApp
|
|
215
223
|
end
|
216
224
|
|
217
225
|
def return_address
|
218
|
-
|
219
|
-
|
220
|
-
rescue ShopifyDomainNotFound
|
226
|
+
return_address_with_params(shop: current_shopify_domain, host: host)
|
227
|
+
rescue ShopifyDomainNotFound, ShopifyHostNotFound
|
221
228
|
base_return_address
|
222
229
|
end
|
223
230
|
|
@@ -21,7 +21,7 @@ module ShopifyApp
|
|
21
21
|
.compact
|
22
22
|
.map do |cookie|
|
23
23
|
cookie << '; Secure' unless cookie =~ /;\s*secure/i
|
24
|
-
cookie << '; SameSite=None'
|
24
|
+
cookie << '; SameSite=None' if ShopifyApp.configuration.embedded_app?
|
25
25
|
cookie
|
26
26
|
end
|
27
27
|
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ShopifyApp
|
4
|
+
class OmniAuthConfiguration
|
5
|
+
attr_reader :strategy, :request
|
6
|
+
attr_writer :client_options_site, :scopes, :per_user_permissions
|
7
|
+
|
8
|
+
def initialize(strategy, request)
|
9
|
+
@strategy = strategy
|
10
|
+
@request = request
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_options
|
14
|
+
strategy.options[:client_options][:site] = client_options_site
|
15
|
+
strategy.options[:scope] = scopes
|
16
|
+
strategy.options[:old_client_secret] = ShopifyApp.configuration.old_secret
|
17
|
+
strategy.options[:per_user_permissions] = request_online_tokens?
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def request_online_tokens?
|
23
|
+
return @per_user_permissions unless @per_user_permissions.nil?
|
24
|
+
default_request_online_tokens?
|
25
|
+
end
|
26
|
+
|
27
|
+
def scopes
|
28
|
+
@scopes || default_scopes
|
29
|
+
end
|
30
|
+
|
31
|
+
def client_options_site
|
32
|
+
@client_options_site || default_client_options_site
|
33
|
+
end
|
34
|
+
|
35
|
+
def default_scopes
|
36
|
+
if request_online_tokens?
|
37
|
+
ShopifyApp.configuration.user_access_scopes
|
38
|
+
else
|
39
|
+
ShopifyApp.configuration.shop_access_scopes
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def default_client_options_site
|
44
|
+
return '' unless shop_domain.present?
|
45
|
+
"https://#{shopify_auth_params[:shop]}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def default_request_online_tokens?
|
49
|
+
strategy.session[:user_tokens] && !update_shop_scopes?
|
50
|
+
end
|
51
|
+
|
52
|
+
def update_shop_scopes?
|
53
|
+
ShopifyApp.configuration.shop_access_scopes_strategy.update_access_scopes?(shop_domain)
|
54
|
+
end
|
55
|
+
|
56
|
+
def shop_domain
|
57
|
+
request.params['shop'] || (shopify_auth_params && shopify_auth_params['shop'])
|
58
|
+
end
|
59
|
+
|
60
|
+
def shopify_auth_params
|
61
|
+
strategy.session['shopify.omniauth_params']&.with_indifferent_access
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -1,14 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module ShopifyApp
|
3
3
|
class InMemoryShopSessionStore < InMemorySessionStore
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
class << self
|
5
|
+
def store(session, *args)
|
6
|
+
id = super
|
7
|
+
repo[session.domain] = session
|
8
|
+
id
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
def retrieve_by_shopify_domain(shopify_domain)
|
12
|
+
repo[shopify_domain]
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
@@ -1,14 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module ShopifyApp
|
3
3
|
class InMemoryUserSessionStore < InMemorySessionStore
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
class << self
|
5
|
+
def store(session, user)
|
6
|
+
id = super
|
7
|
+
repo[user.shopify_user_id] = session
|
8
|
+
id
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
def retrieve_by_shopify_user_id(user_id)
|
12
|
+
repo[user_id]
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ShopifyApp
|
4
|
+
module ShopSessionStorageWithScopes
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
include ::ShopifyApp::SessionStorage
|
7
|
+
|
8
|
+
included do
|
9
|
+
validates :shopify_domain, presence: true, uniqueness: { case_sensitive: false }
|
10
|
+
end
|
11
|
+
|
12
|
+
class_methods do
|
13
|
+
def store(auth_session, *_args)
|
14
|
+
shop = find_or_initialize_by(shopify_domain: auth_session.domain)
|
15
|
+
shop.shopify_token = auth_session.token
|
16
|
+
shop.access_scopes = auth_session.access_scopes
|
17
|
+
|
18
|
+
shop.save!
|
19
|
+
shop.id
|
20
|
+
end
|
21
|
+
|
22
|
+
def retrieve(id)
|
23
|
+
shop = find_by(id: id)
|
24
|
+
construct_session(shop)
|
25
|
+
end
|
26
|
+
|
27
|
+
def retrieve_by_shopify_domain(domain)
|
28
|
+
shop = find_by(shopify_domain: domain)
|
29
|
+
construct_session(shop)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def construct_session(shop)
|
35
|
+
return unless shop
|
36
|
+
|
37
|
+
ShopifyAPI::Session.new(
|
38
|
+
domain: shop.shopify_domain,
|
39
|
+
token: shop.shopify_token,
|
40
|
+
api_version: shop.api_version,
|
41
|
+
access_scopes: shop.access_scopes
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def access_scopes=(scopes)
|
47
|
+
super(scopes)
|
48
|
+
rescue NotImplementedError, NoMethodError
|
49
|
+
raise NotImplementedError, "#access_scopes= must be defined to handle storing access scopes: #{scopes}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def access_scopes
|
53
|
+
super
|
54
|
+
rescue NotImplementedError, NoMethodError
|
55
|
+
raise NotImplementedError, "#access_scopes= must be defined to hook into stored access scopes"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module ShopifyApp
|
3
|
+
module UserSessionStorageWithScopes
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
include ::ShopifyApp::SessionStorage
|
6
|
+
|
7
|
+
included do
|
8
|
+
validates :shopify_domain, presence: true
|
9
|
+
end
|
10
|
+
|
11
|
+
class_methods do
|
12
|
+
def store(auth_session, user)
|
13
|
+
user = find_or_initialize_by(shopify_user_id: user[:id])
|
14
|
+
user.shopify_token = auth_session.token
|
15
|
+
user.shopify_domain = auth_session.domain
|
16
|
+
user.access_scopes = auth_session.access_scopes
|
17
|
+
|
18
|
+
user.save!
|
19
|
+
user.id
|
20
|
+
end
|
21
|
+
|
22
|
+
def retrieve(id)
|
23
|
+
user = find_by(id: id)
|
24
|
+
construct_session(user)
|
25
|
+
end
|
26
|
+
|
27
|
+
def retrieve_by_shopify_user_id(user_id)
|
28
|
+
user = find_by(shopify_user_id: user_id)
|
29
|
+
construct_session(user)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def construct_session(user)
|
35
|
+
return unless user
|
36
|
+
|
37
|
+
ShopifyAPI::Session.new(
|
38
|
+
domain: user.shopify_domain,
|
39
|
+
token: user.shopify_token,
|
40
|
+
api_version: user.api_version,
|
41
|
+
access_scopes: user.access_scopes
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def access_scopes=(scopes)
|
47
|
+
super(scopes)
|
48
|
+
rescue NotImplementedError, NoMethodError
|
49
|
+
raise NotImplementedError, "#access_scopes= must be defined to handle storing access scopes: #{scopes}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def access_scopes
|
53
|
+
super
|
54
|
+
rescue NotImplementedError, NoMethodError
|
55
|
+
raise NotImplementedError, "#access_scopes= must be defined to hook into stored access scopes"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/shopify_app/utils.rb
CHANGED
@@ -20,5 +20,17 @@ module ShopifyApp
|
|
20
20
|
rescue ActiveResource::ConnectionError
|
21
21
|
logger.error("[ShopifyAPI::ApiVersion] Unable to fetch api_versions from Shopify")
|
22
22
|
end
|
23
|
+
|
24
|
+
def self.shop_login_url(shop:, return_to:)
|
25
|
+
return ShopifyApp.configuration.login_url unless shop
|
26
|
+
url = URI(ShopifyApp.configuration.login_url)
|
27
|
+
|
28
|
+
url.query = URI.encode_www_form(
|
29
|
+
shop: shop,
|
30
|
+
return_to: return_to,
|
31
|
+
)
|
32
|
+
|
33
|
+
url.to_s
|
34
|
+
end
|
23
35
|
end
|
24
36
|
end
|
data/lib/shopify_app/version.rb
CHANGED
data/package.json
CHANGED
data/service.yml
CHANGED
data/shopify_app.gemspec
CHANGED
@@ -14,10 +14,11 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.metadata['allowed_push_host'] = 'https://rubygems.org'
|
15
15
|
|
16
16
|
s.add_runtime_dependency('browser_sniffer', '~> 1.2.2')
|
17
|
-
s.add_runtime_dependency('
|
18
|
-
s.add_runtime_dependency('
|
19
|
-
s.add_runtime_dependency('
|
20
|
-
s.add_runtime_dependency('
|
17
|
+
s.add_runtime_dependency('omniauth-rails_csrf_protection')
|
18
|
+
s.add_runtime_dependency('rails', '> 5.2.1', '< 6.2')
|
19
|
+
s.add_runtime_dependency('shopify_api', '~> 9.4')
|
20
|
+
s.add_runtime_dependency('omniauth-shopify-oauth2', '~> 2.3')
|
21
|
+
s.add_runtime_dependency('jwt', '>= 2.2.3')
|
21
22
|
s.add_runtime_dependency('redirect_safely', '~> 1.0')
|
22
23
|
|
23
24
|
s.add_development_dependency('rake')
|
data/yarn.lock
CHANGED
@@ -1474,10 +1474,10 @@ bluebird@^3.5.5:
|
|
1474
1474
|
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
1475
1475
|
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
1476
1476
|
|
1477
|
-
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.
|
1478
|
-
version "4.
|
1479
|
-
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.
|
1480
|
-
integrity sha512-
|
1477
|
+
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
|
1478
|
+
version "4.12.0"
|
1479
|
+
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
|
1480
|
+
integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
|
1481
1481
|
|
1482
1482
|
bn.js@^5.1.1:
|
1483
1483
|
version "5.1.3"
|
@@ -1531,7 +1531,7 @@ braces@^3.0.2, braces@~3.0.2:
|
|
1531
1531
|
dependencies:
|
1532
1532
|
fill-range "^7.0.1"
|
1533
1533
|
|
1534
|
-
brorand@^1.0.1:
|
1534
|
+
brorand@^1.0.1, brorand@^1.1.0:
|
1535
1535
|
version "1.1.0"
|
1536
1536
|
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
|
1537
1537
|
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
|
@@ -2180,17 +2180,17 @@ electron-to-chromium@^1.3.562:
|
|
2180
2180
|
integrity sha512-fNaYN3EtKQWLQsrKXui8mzcryJXuA0LbCLoizeX6oayG2emBaS5MauKjCPAvc29NEY4FpLHIUWiP+Y0Bfrs5dg==
|
2181
2181
|
|
2182
2182
|
elliptic@^6.5.3:
|
2183
|
-
version "6.5.
|
2184
|
-
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.
|
2185
|
-
integrity sha512-
|
2183
|
+
version "6.5.4"
|
2184
|
+
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
|
2185
|
+
integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
|
2186
2186
|
dependencies:
|
2187
|
-
bn.js "^4.
|
2188
|
-
brorand "^1.0
|
2187
|
+
bn.js "^4.11.9"
|
2188
|
+
brorand "^1.1.0"
|
2189
2189
|
hash.js "^1.0.0"
|
2190
|
-
hmac-drbg "^1.0.
|
2191
|
-
inherits "^2.0.
|
2192
|
-
minimalistic-assert "^1.0.
|
2193
|
-
minimalistic-crypto-utils "^1.0.
|
2190
|
+
hmac-drbg "^1.0.1"
|
2191
|
+
inherits "^2.0.4"
|
2192
|
+
minimalistic-assert "^1.0.1"
|
2193
|
+
minimalistic-crypto-utils "^1.0.1"
|
2194
2194
|
|
2195
2195
|
emoji-regex@^7.0.1:
|
2196
2196
|
version "7.0.3"
|
@@ -2782,7 +2782,7 @@ he@1.2.0:
|
|
2782
2782
|
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
2783
2783
|
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
2784
2784
|
|
2785
|
-
hmac-drbg@^1.0.
|
2785
|
+
hmac-drbg@^1.0.1:
|
2786
2786
|
version "1.0.1"
|
2787
2787
|
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
2788
2788
|
integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
|
@@ -3492,7 +3492,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
|
|
3492
3492
|
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
|
3493
3493
|
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
|
3494
3494
|
|
3495
|
-
minimalistic-crypto-utils@^1.0.
|
3495
|
+
minimalistic-crypto-utils@^1.0.1:
|
3496
3496
|
version "1.0.1"
|
3497
3497
|
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
3498
3498
|
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
|
@@ -4519,9 +4519,9 @@ sprintf-js@~1.0.2:
|
|
4519
4519
|
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
|
4520
4520
|
|
4521
4521
|
ssri@^6.0.1:
|
4522
|
-
version "6.0.
|
4523
|
-
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.
|
4524
|
-
integrity sha512-
|
4522
|
+
version "6.0.2"
|
4523
|
+
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
|
4524
|
+
integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
|
4525
4525
|
dependencies:
|
4526
4526
|
figgy-pudding "^3.5.1"
|
4527
4527
|
|
@@ -5115,9 +5115,9 @@ xtend@^4.0.0, xtend@~4.0.1:
|
|
5115
5115
|
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
|
5116
5116
|
|
5117
5117
|
y18n@^4.0.0:
|
5118
|
-
version "4.0.
|
5119
|
-
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.
|
5120
|
-
integrity sha512-
|
5118
|
+
version "4.0.3"
|
5119
|
+
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
|
5120
|
+
integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
|
5121
5121
|
|
5122
5122
|
yallist@^3.0.2:
|
5123
5123
|
version "3.1.1"
|