sumsub-ruby-sdk 0.1.3 → 0.2.1
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/.gitignore +24 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile.lock +25 -26
- data/README.md +3 -3
- data/lib/sumsub/configuration.rb +2 -0
- data/lib/sumsub/message_signer.rb +2 -0
- data/lib/sumsub/parser.rb +2 -0
- data/lib/sumsub/request.rb +30 -4
- data/lib/sumsub/struct/address.rb +2 -2
- data/lib/sumsub/struct/applicant.rb +3 -2
- data/lib/sumsub/struct/applicant_update.rb +7 -4
- data/lib/sumsub/struct/base_struct.rb +4 -1
- data/lib/sumsub/struct/document_metadata.rb +3 -3
- data/lib/sumsub/struct/error_response.rb +2 -2
- data/lib/sumsub/struct/info.rb +2 -3
- data/lib/sumsub/struct/review_result.rb +14 -0
- data/lib/sumsub/struct/webhook_payload.rb +23 -0
- data/lib/sumsub/types.rb +139 -0
- data/lib/sumsub/version.rb +1 -1
- data/lib/sumsub/webhook_sender.rb +15 -0
- data/lib/sumsub.rb +27 -14
- data/sumsub-ruby-sdk.gemspec +8 -13
- metadata +35 -32
- data/lib/types.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb0e5ceef811ac7ad232fe0fef90925856a308d531e58b9766fa18bb73fde87a
|
4
|
+
data.tar.gz: af6848516f45cc3aa6bdc0bf923e70ab7086852c6e95eec88dbc5c1bf7066031
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 796f27260f9f4049e5a3925550d9dd6ebc44663a8235beb67beea0d8c412c7d8810c31130873f7195530e1a2346b841fe36d3de347aeaa737eba31c6dbcdacc2
|
7
|
+
data.tar.gz: feb4186b84ea89ba6eab461221d5ed16e5715e917c6b0a37842a78abaea1284874e021ba4549ba84e35559bb35aae88bf745805f7b741f54aee468a3b6641b81
|
data/.gitignore
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
# See https://help.github.com/articles/ignoring-files
|
2
|
+
# for more about ignoring files.
|
3
|
+
#
|
4
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
5
|
+
# or operating system, you probably want to add a global ignore instead:
|
6
|
+
# git config --global core.excludesfile '~/.gitignore_global'
|
7
|
+
|
8
|
+
*.gem
|
9
|
+
*.rbc
|
10
|
+
|
1
11
|
/.bundle/
|
2
12
|
/.yardoc
|
3
13
|
/_yardoc/
|
@@ -10,4 +20,18 @@
|
|
10
20
|
# rspec failure tracking
|
11
21
|
.rspec_status
|
12
22
|
|
23
|
+
# Other
|
13
24
|
test_script
|
25
|
+
|
26
|
+
# Environment normalization:
|
27
|
+
/.bundle/
|
28
|
+
/vendor/bundle/*
|
29
|
+
!/vendor/bundle/.keep
|
30
|
+
|
31
|
+
# For a library or gem, you might want to ignore these files since the code is
|
32
|
+
# intended to run in multiple environments; otherwise, check them in:
|
33
|
+
/.ruby-version
|
34
|
+
/.ruby-gemset
|
35
|
+
|
36
|
+
# Unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
37
|
+
/.rvmrc
|
data/CHANGELOG.md
CHANGED
@@ -3,3 +3,13 @@
|
|
3
3
|
|
4
4
|
### 0.1.3
|
5
5
|
- Require level name as argument in `get_access_token` of `Sumsub::Request`. This change makes the method compatible with the [recent updates in the Sumsub SDK](https://developers.sumsub.com/migrations/sdk.html#sdk-migration-guide).
|
6
|
+
|
7
|
+
### 0.1.4
|
8
|
+
- General minor fixes (don't require dev gems in the production build, add extra ignored files in `.gitignore`, etc);
|
9
|
+
- Move the `require 'dry-struct'` to the `lib/sumsub.rb`, so we don't need to always require it in our structs;
|
10
|
+
- Add [`generate_external_link`](https://developers.sumsub.com/api-reference/additional-methods.html#generating-websdk-external-link-for-particular-user);
|
11
|
+
- Updated structs with new fields;
|
12
|
+
- Add `WebhookSender` with `get_payload` class method to format the payload before informing it to the `verify_webhook_sender` method (those strange string transformations are necessary in order to receive the right answer from Sumsub).
|
13
|
+
|
14
|
+
### 0.2.1
|
15
|
+
- New rejection labels ([PR](ydakuka:replace-old-reject-label-with-new-ones))
|
data/Gemfile.lock
CHANGED
@@ -1,36 +1,32 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
sumsub-ruby-sdk (0.1.
|
5
|
-
dry-struct (~> 1.4
|
6
|
-
http (
|
7
|
-
mime-types (~> 3.3
|
8
|
-
pry (~> 0.14.1)
|
9
|
-
rspec (~> 3.10.0)
|
10
|
-
timecop (~> 0.9.4)
|
11
|
-
webmock (~> 3.13.0)
|
4
|
+
sumsub-ruby-sdk (0.1.3)
|
5
|
+
dry-struct (~> 1.4)
|
6
|
+
http (>= 4.0)
|
7
|
+
mime-types (~> 3.3)
|
12
8
|
|
13
9
|
GEM
|
14
10
|
remote: https://rubygems.org/
|
15
11
|
specs:
|
16
|
-
addressable (2.
|
12
|
+
addressable (2.8.0)
|
17
13
|
public_suffix (>= 2.0.2, < 5.0)
|
18
14
|
coderay (1.1.3)
|
19
|
-
concurrent-ruby (1.1.
|
15
|
+
concurrent-ruby (1.1.9)
|
20
16
|
crack (0.4.5)
|
21
17
|
rexml
|
22
18
|
diff-lcs (1.4.4)
|
23
19
|
domain_name (0.5.20190701)
|
24
20
|
unf (>= 0.0.5, < 1.0.0)
|
25
|
-
dry-configurable (0.
|
21
|
+
dry-configurable (0.13.0)
|
26
22
|
concurrent-ruby (~> 1.0)
|
27
|
-
dry-core (~> 0.
|
28
|
-
dry-container (0.
|
23
|
+
dry-core (~> 0.6)
|
24
|
+
dry-container (0.9.0)
|
29
25
|
concurrent-ruby (~> 1.0)
|
30
|
-
dry-configurable (~> 0.
|
31
|
-
dry-core (0.
|
26
|
+
dry-configurable (~> 0.13, >= 0.13.0)
|
27
|
+
dry-core (0.7.1)
|
32
28
|
concurrent-ruby (~> 1.0)
|
33
|
-
dry-inflector (0.2.
|
29
|
+
dry-inflector (0.2.1)
|
34
30
|
dry-logic (1.2.0)
|
35
31
|
concurrent-ruby (~> 1.0)
|
36
32
|
dry-core (~> 0.5, >= 0.5)
|
@@ -44,7 +40,7 @@ GEM
|
|
44
40
|
dry-core (~> 0.5, >= 0.5)
|
45
41
|
dry-inflector (~> 0.1, >= 0.1.2)
|
46
42
|
dry-logic (~> 1.0, >= 1.0.2)
|
47
|
-
ffi (1.15.
|
43
|
+
ffi (1.15.4)
|
48
44
|
ffi-compiler (1.0.1)
|
49
45
|
ffi (>= 1.0.0)
|
50
46
|
rake
|
@@ -54,7 +50,7 @@ GEM
|
|
54
50
|
http-cookie (~> 1.0)
|
55
51
|
http-form_data (~> 2.2)
|
56
52
|
llhttp-ffi (~> 0.0.1)
|
57
|
-
http-cookie (1.0.
|
53
|
+
http-cookie (1.0.4)
|
58
54
|
domain_name (~> 0.5)
|
59
55
|
http-form_data (2.3.0)
|
60
56
|
ice_nine (0.11.2)
|
@@ -62,14 +58,14 @@ GEM
|
|
62
58
|
ffi-compiler (~> 1.0)
|
63
59
|
rake (~> 13.0)
|
64
60
|
method_source (1.0.0)
|
65
|
-
mime-types (3.
|
61
|
+
mime-types (3.4.1)
|
66
62
|
mime-types-data (~> 3.2015)
|
67
|
-
mime-types-data (3.2021.
|
63
|
+
mime-types-data (3.2021.1115)
|
68
64
|
pry (0.14.1)
|
69
65
|
coderay (~> 1.1)
|
70
66
|
method_source (~> 1.0)
|
71
67
|
public_suffix (4.0.6)
|
72
|
-
rake (13.0.
|
68
|
+
rake (13.0.6)
|
73
69
|
rexml (3.2.5)
|
74
70
|
rspec (3.10.0)
|
75
71
|
rspec-core (~> 3.10.0)
|
@@ -83,13 +79,13 @@ GEM
|
|
83
79
|
rspec-mocks (3.10.2)
|
84
80
|
diff-lcs (>= 1.2.0, < 2.0)
|
85
81
|
rspec-support (~> 3.10.0)
|
86
|
-
rspec-support (3.10.
|
82
|
+
rspec-support (3.10.3)
|
87
83
|
timecop (0.9.4)
|
88
84
|
unf (0.1.4)
|
89
85
|
unf_ext
|
90
|
-
unf_ext (0.0.
|
91
|
-
webmock (3.
|
92
|
-
addressable (>= 2.
|
86
|
+
unf_ext (0.0.8)
|
87
|
+
webmock (3.14.0)
|
88
|
+
addressable (>= 2.8.0)
|
93
89
|
crack (>= 0.3.2)
|
94
90
|
hashdiff (>= 0.4.0, < 2.0.0)
|
95
91
|
|
@@ -98,9 +94,12 @@ PLATFORMS
|
|
98
94
|
x86_64-linux
|
99
95
|
|
100
96
|
DEPENDENCIES
|
97
|
+
pry (~> 0.14)
|
101
98
|
rake (~> 13.0)
|
102
99
|
rspec (~> 3.0)
|
103
100
|
sumsub-ruby-sdk!
|
101
|
+
timecop (~> 0.9)
|
102
|
+
webmock (~> 3.13)
|
104
103
|
|
105
104
|
BUNDLED WITH
|
106
|
-
2.2.
|
105
|
+
2.2.32
|
data/README.md
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# SumSub Ruby SDK
|
2
2
|
|
3
|
-
This gem is an
|
3
|
+
This gem is an unofficial SDK for the [SumSub API](https://developers.sumsub.com/api-reference/).
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
9
|
```ruby
|
10
|
-
gem 'sumsub-ruby-sdk', '~> 0.1.
|
10
|
+
gem 'sumsub-ruby-sdk', '~> 0.1.3', require: 'sumsub'
|
11
11
|
```
|
12
12
|
|
13
13
|
And then execute:
|
@@ -16,7 +16,7 @@ And then execute:
|
|
16
16
|
|
17
17
|
## Configuration and Usage
|
18
18
|
|
19
|
-
You can configure your credentials using `Sumsub::Configure` block. There are three keys you can inform: *token*, *secret_key* and *production*. The token and secret key you need to generate from your SumSub account, and *production* is a boolean value where you specify if you wanna use SumSub production or test
|
19
|
+
You can configure your credentials using `Sumsub::Configure` block. There are three keys you can inform: *token*, *secret_key* and *production*. The token and secret key you need to generate from your SumSub account, and *production* is a boolean value where you specify if you wanna use SumSub production or test environment. To use the test environment, just set production as `false`.
|
20
20
|
|
21
21
|
```ruby
|
22
22
|
Sumsub.configure do |config|
|
data/lib/sumsub/configuration.rb
CHANGED
data/lib/sumsub/parser.rb
CHANGED
data/lib/sumsub/request.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Sumsub
|
2
4
|
class Request
|
3
5
|
PRODUCTION_URL = "https://api.sumsub.com"
|
@@ -17,8 +19,8 @@ module Sumsub
|
|
17
19
|
|
18
20
|
# API docs: https://developers.sumsub.com/api-reference/#creating-an-applicant
|
19
21
|
# Sumsub::Struct::Applicant can be used as applicant.
|
20
|
-
def create_applicant(
|
21
|
-
resource = "applicants?levelName=#{
|
22
|
+
def create_applicant(level_name, applicant)
|
23
|
+
resource = "applicants?levelName=#{level_name}"
|
22
24
|
headers = build_header(resource, body: applicant.to_json)
|
23
25
|
response = HTTP.headers(headers)
|
24
26
|
.post("#{@url}/resources/#{resource}", json: applicant)
|
@@ -140,8 +142,8 @@ module Sumsub
|
|
140
142
|
end
|
141
143
|
|
142
144
|
# API docs: https://developers.sumsub.com/api-reference/#access-tokens-for-sdks
|
143
|
-
def get_access_token(user_id,
|
144
|
-
resource = "accessTokens?userId=#{user_id}&levelName=#{
|
145
|
+
def get_access_token(user_id, level_name, ttl_in_seconds: nil, external_action_id: nil)
|
146
|
+
resource = "accessTokens?userId=#{user_id}&levelName=#{level_name}&ttlInSecs=#{ttl_in_seconds}&external_action_id=#{external_action_id}"
|
145
147
|
headers = build_header(resource, method: 'POST')
|
146
148
|
response = HTTP.headers(headers)
|
147
149
|
.post("#{@url}/resources/#{resource}")
|
@@ -149,6 +151,17 @@ module Sumsub
|
|
149
151
|
parse_response(response)
|
150
152
|
end
|
151
153
|
|
154
|
+
# API docs: https://developers.sumsub.com/api-reference/#testing-on-the-test-environment
|
155
|
+
# Sumsub::Struct::Applicant can be used as review_result.
|
156
|
+
def testing_on_test_environment(applicant_id, review_result)
|
157
|
+
resource = "applicants/#{applicant_id}/status/testCompleted"
|
158
|
+
headers = build_header(resource, body: review_result.to_json)
|
159
|
+
response = HTTP.headers(headers)
|
160
|
+
.post("#{@url}/resources/#{resource}", json: review_result)
|
161
|
+
|
162
|
+
parse_response(response)
|
163
|
+
end
|
164
|
+
|
152
165
|
# API docs: https://developers.sumsub.com/api-reference/#verifying-webhook-sender
|
153
166
|
# Your payload need to be informed as a string.
|
154
167
|
def verify_webhook_sender(webhook_secret_key, payload)
|
@@ -167,6 +180,18 @@ module Sumsub
|
|
167
180
|
parse_response(response)
|
168
181
|
end
|
169
182
|
|
183
|
+
# API docs: https://developers.sumsub.com/api-reference/additional-methods.html#generating-websdk-external-link-for-particular-user
|
184
|
+
# Sumsub::Struct::Applicant can be used as body.
|
185
|
+
def generate_external_link(level_name, ttl_in_seconds, external_user_id, locale: nil, body: {})
|
186
|
+
resource = "sdkIntegrations/levels/#{level_name}/websdkLink?ttlInSecs=#{ttl_in_seconds}&externalUserId=#{external_user_id}&lang=#{locale}"
|
187
|
+
headers = build_header(resource, method: 'POST', body: body.to_json)
|
188
|
+
|
189
|
+
response = HTTP.headers(headers)
|
190
|
+
.post("#{@url}/resources/#{resource}", json: body)
|
191
|
+
|
192
|
+
parse_response(response)
|
193
|
+
end
|
194
|
+
|
170
195
|
private
|
171
196
|
|
172
197
|
# More infos about the required header and the signing strategy:
|
@@ -184,6 +209,7 @@ module Sumsub
|
|
184
209
|
resource: resource,
|
185
210
|
body: body,
|
186
211
|
method: method,
|
212
|
+
secret_key: @secret_key,
|
187
213
|
)
|
188
214
|
|
189
215
|
{
|
@@ -1,9 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Sumsub
|
2
4
|
module Struct
|
3
5
|
# https://developers.sumsub.com/api-reference/#addresses-elements-fields
|
4
6
|
class Address < BaseStruct
|
5
|
-
include Types
|
6
|
-
|
7
7
|
attribute? :country, Types::String
|
8
8
|
attribute? :postCode, Types::String
|
9
9
|
attribute? :town, Types::String
|
@@ -1,12 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Sumsub
|
2
4
|
module Struct
|
3
5
|
# https://developers.sumsub.com/api-reference/#request-body
|
4
6
|
class Applicant < BaseStruct
|
5
|
-
include Types
|
6
|
-
|
7
7
|
attribute :externalUserId, Types::Coercible::String
|
8
8
|
attribute? :sourceKey, Types::String
|
9
9
|
attribute? :email, Types::String
|
10
|
+
attribute? :phone, Types::String
|
10
11
|
attribute? :lang, Types::String
|
11
12
|
attribute? :metadata, Types::Array.of(Types::Hash)
|
12
13
|
attribute? :info, Types::Instance(Sumsub::Struct::Info)
|
@@ -1,16 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Sumsub
|
2
4
|
module Struct
|
3
5
|
# https://developers.sumsub.com/api-reference/#request-body-2
|
4
6
|
class ApplicantUpdate < BaseStruct
|
5
|
-
include Types
|
6
|
-
|
7
7
|
attribute :id, Types::String
|
8
8
|
attribute? :externalUserId, Types::String
|
9
|
-
attribute? :sourceKey, Types::String
|
10
9
|
attribute? :email, Types::String
|
10
|
+
attribute? :phone, Types::String
|
11
|
+
attribute? :sourceKey, Types::String
|
12
|
+
attribute? :type, Types::String
|
11
13
|
attribute? :lang, Types::String
|
14
|
+
attribute? :questionnaires, Types::Array.of(Types::Hash)
|
12
15
|
attribute? :metadata, Types::Array.of(Types::Hash)
|
13
|
-
attribute? :
|
16
|
+
attribute? :deleted, Types::Bool
|
14
17
|
end
|
15
18
|
end
|
16
19
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Sumsub
|
2
4
|
module Struct
|
3
5
|
# https://developers.sumsub.com/api-reference/#request-metadata-body-part-fields
|
4
6
|
class DocumentMetadata < BaseStruct
|
5
|
-
include Types
|
6
|
-
|
7
7
|
attribute :idDocType, Types::IdDocTypes
|
8
|
-
attribute? :idDocSubType, Types::
|
8
|
+
attribute? :idDocSubType, Types::IdDocSubTypes
|
9
9
|
attribute :country, Types::String # https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
|
10
10
|
attribute? :firstName, Types::String
|
11
11
|
attribute? :middleName, Types::String
|
@@ -1,9 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Sumsub
|
2
4
|
module Struct
|
3
5
|
# https://developers.sumsub.com/api-reference/#response-body
|
4
6
|
class ErrorResponse < BaseStruct
|
5
|
-
include Types
|
6
|
-
|
7
7
|
attribute :description, Types::String.optional
|
8
8
|
attribute :code, Types::Coercible::String.optional
|
9
9
|
attribute :correlation_id, Types::Coercible::String.optional
|
data/lib/sumsub/struct/info.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Sumsub
|
2
4
|
module Struct
|
3
5
|
# https://developers.sumsub.com/api-reference/#fixedinfo-and-info-attributes
|
4
6
|
class Info < BaseStruct
|
5
|
-
include Types
|
6
|
-
|
7
7
|
attribute? :firstName, Types::String
|
8
8
|
attribute? :lastName, Types::String
|
9
9
|
attribute? :middleName, Types::String
|
@@ -18,7 +18,6 @@ module Sumsub
|
|
18
18
|
attribute? :stateOfBirth, Types::String
|
19
19
|
attribute? :country, Types::String
|
20
20
|
attribute? :nationality, Types::String
|
21
|
-
attribute? :phone, Types::String
|
22
21
|
attribute? :addresses, Types::Array.of(Sumsub::Struct::Address)
|
23
22
|
end
|
24
23
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sumsub
|
4
|
+
module Struct
|
5
|
+
# https://developers.sumsub.com/api-reference/#request-body-4
|
6
|
+
class ReviewResult < BaseStruct
|
7
|
+
attribute :reviewAnswer, Types::ReviewAnswers
|
8
|
+
attribute? :rejectLabels, Types::Array.of(Types::RejectLabels)
|
9
|
+
attribute? :reviewRejectType, Types::ReviewRejectTypes
|
10
|
+
attribute? :clientComment, Types::String
|
11
|
+
attribute? :moderationComment, Types::String
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sumsub
|
4
|
+
module Struct
|
5
|
+
# https://developers.sumsub.com/api-reference/#webhook-payload-attributes
|
6
|
+
class WebhookPayload < BaseStruct
|
7
|
+
attribute :applicantId, Types::String
|
8
|
+
attribute :inspectionId, Types::String
|
9
|
+
attribute :correlationId, Types::String
|
10
|
+
attribute :externalUserId, Types::String
|
11
|
+
attribute :type, Types::String
|
12
|
+
attribute :reviewStatus, Types::String
|
13
|
+
attribute :createdAt, Types::String
|
14
|
+
attribute? :applicantType, Types::String
|
15
|
+
attribute? :reviewResult, Types::Instance(Sumsub::Struct::ReviewResult)
|
16
|
+
attribute? :applicantMemberOf, Types::Array.of(Types::Hash)
|
17
|
+
attribute? :videoIdentReviewStatus, Types::String
|
18
|
+
attribute? :applicantActionId, Types::String
|
19
|
+
attribute? :externalApplicantActionId, Types::String
|
20
|
+
attribute :clientId, Types::String
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/sumsub/types.rb
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sumsub
|
4
|
+
module Types
|
5
|
+
include Dry.Types()
|
6
|
+
|
7
|
+
# https://developers.sumsub.com/api-reference/#supported-document-types
|
8
|
+
IdDocTypes = Types::Strict::Symbol
|
9
|
+
.constructor(&:to_sym)
|
10
|
+
.enum(
|
11
|
+
:ID_CARD,
|
12
|
+
:PASSPORT,
|
13
|
+
:DRIVERS, # Driving license
|
14
|
+
:RESIDENCE_PERMIT,
|
15
|
+
:UTILITY_BILL,
|
16
|
+
:SELFIE,
|
17
|
+
:VIDEO_SELFIE,
|
18
|
+
:PROFILE_IMAGE,
|
19
|
+
:ID_DOC_PHOTO,
|
20
|
+
:AGREEMENT,
|
21
|
+
:CONTRACT,
|
22
|
+
:DRIVERS_TRANSLATION,
|
23
|
+
:INVESTOR_DOC,
|
24
|
+
:VEHICLE_REGISTRATION_CERTIFICATE,
|
25
|
+
:INCOME_SOURCE, # Proof of income
|
26
|
+
:PAYMENT_METHOD,
|
27
|
+
:BANK_CARD,
|
28
|
+
:COVID_VACCINATION_FORM,
|
29
|
+
:OTHER,
|
30
|
+
nil,
|
31
|
+
)
|
32
|
+
|
33
|
+
# https://developers.sumsub.com/api-reference/#request-metadata-body-part-fields
|
34
|
+
IdDocSubTypes = Types::Strict::Symbol
|
35
|
+
.constructor(&:to_sym)
|
36
|
+
.enum(
|
37
|
+
:FRONT_SIDE,
|
38
|
+
:BACK_SIDE,
|
39
|
+
nil,
|
40
|
+
)
|
41
|
+
|
42
|
+
# https://developers.sumsub.com/api-reference/#getting-verification-results
|
43
|
+
ReviewAnswers = Types::Strict::Symbol
|
44
|
+
.constructor(&:to_sym)
|
45
|
+
.enum(
|
46
|
+
:GREEN,
|
47
|
+
:RED,
|
48
|
+
)
|
49
|
+
|
50
|
+
# https://developers.sumsub.com/api-reference/#getting-verification-results
|
51
|
+
RejectLabels = Types::Strict::Symbol
|
52
|
+
.constructor(&:to_sym)
|
53
|
+
.enum(
|
54
|
+
:FORCED_VERIFICATION,
|
55
|
+
:LIVENESS_WITH_PHONE,
|
56
|
+
:DEEPFAKE,
|
57
|
+
:DOCUMENT_TEMPLATE,
|
58
|
+
:LOW_QUALITY,
|
59
|
+
:SPAM,
|
60
|
+
:NOT_DOCUMENT,
|
61
|
+
:SELFIE_MISMATCH,
|
62
|
+
:ID_INVALID,
|
63
|
+
:FOREIGNER,
|
64
|
+
:DUPLICATE,
|
65
|
+
:BAD_AVATAR,
|
66
|
+
:WRONG_USER_REGION,
|
67
|
+
:INCOMPLETE_DOCUMENT,
|
68
|
+
:BLACKLIST,
|
69
|
+
:UNSATISFACTORY_PHOTOS,
|
70
|
+
:DOCUMENT_PAGE_MISSING,
|
71
|
+
:DOCUMENT_DAMAGED,
|
72
|
+
:REGULATIONS_VIOLATIONS,
|
73
|
+
:INCONSISTENT_PROFILE,
|
74
|
+
:PROBLEMATIC_APPLICANT_DATA,
|
75
|
+
:ADDITIONAL_DOCUMENT_REQUIRED,
|
76
|
+
:AGE_REQUIREMENT_MISMATCH,
|
77
|
+
:EXPERIENCE_REQUIREMENT_MISMATCH,
|
78
|
+
:CRIMINAL,
|
79
|
+
:WRONG_ADDRESS,
|
80
|
+
:GRAPHIC_EDITOR,
|
81
|
+
:DOCUMENT_DEPRIVED,
|
82
|
+
:COMPROMISED_PERSONS,
|
83
|
+
:PEP,
|
84
|
+
:ADVERSE_MEDIA,
|
85
|
+
:FRAUDULENT_PATTERNS,
|
86
|
+
:SANCTIONS,
|
87
|
+
:NOT_ALL_CHECKS_COMPLETED,
|
88
|
+
:FRONT_SIDE_MISSING,
|
89
|
+
:BACK_SIDE_MISSING,
|
90
|
+
:SCREENSHOTS,
|
91
|
+
:BLACK_AND_WHITE,
|
92
|
+
:INCOMPATIBLE_LANGUAGE,
|
93
|
+
:EXPIRATION_DATE,
|
94
|
+
:UNFILLED_ID,
|
95
|
+
:BAD_SELFIE,
|
96
|
+
:BAD_VIDEO_SELFIE,
|
97
|
+
:BAD_FACE_MATCHING,
|
98
|
+
:BAD_PROOF_OF_IDENTITY,
|
99
|
+
:BAD_PROOF_OF_ADDRESS,
|
100
|
+
:BAD_PROOF_OF_PAYMENT,
|
101
|
+
:SELFIE_WITH_PAPER,
|
102
|
+
:FRAUDULENT_LIVENESS,
|
103
|
+
:OTHER,
|
104
|
+
:REQUESTED_DATA_MISMATCH,
|
105
|
+
:OK,
|
106
|
+
:COMPANY_NOT_DEFINED_STRUCTURE,
|
107
|
+
:COMPANY_NOT_DEFINED_BENEFICIARIES,
|
108
|
+
:COMPANY_NOT_VALIDATED_BENEFICIARIES,
|
109
|
+
:COMPANY_NOT_DEFINED_REPRESENTATIVES,
|
110
|
+
:COMPANY_NOT_VALIDATED_REPRESENTATIVES,
|
111
|
+
)
|
112
|
+
|
113
|
+
# https://developers.sumsub.com/api-reference/#getting-verification-results
|
114
|
+
ReviewRejectTypes = Types::Strict::Symbol
|
115
|
+
.constructor(&:to_sym)
|
116
|
+
.enum(
|
117
|
+
:FINAL,
|
118
|
+
:RETRY,
|
119
|
+
)
|
120
|
+
|
121
|
+
# https://developers.sumsub.com/api-reference/#webhook-types
|
122
|
+
WebhookTypes = Types::Strict::Symbol
|
123
|
+
.constructor(&:to_sym)
|
124
|
+
.enum(
|
125
|
+
:applicantReviewed,
|
126
|
+
:applicantPending,
|
127
|
+
:applicantCreated,
|
128
|
+
:applicantOnHold,
|
129
|
+
:applicantPersonalInfoChanged,
|
130
|
+
:applicantPrechecked,
|
131
|
+
:applicantDeleted,
|
132
|
+
:videoIdentStatusChanged,
|
133
|
+
:applicantReset,
|
134
|
+
:applicantActionPending,
|
135
|
+
:applicantActionReviewed,
|
136
|
+
:applicantActionOnHold,
|
137
|
+
)
|
138
|
+
end
|
139
|
+
end
|
data/lib/sumsub/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sumsub
|
4
|
+
# https://developers.sumsub.com/api-reference/#verifying-webhook-sender
|
5
|
+
class WebhookSender
|
6
|
+
def self.get_payload(params)
|
7
|
+
JSON.pretty_generate(
|
8
|
+
params,
|
9
|
+
space_before: ' ',
|
10
|
+
)
|
11
|
+
.gsub("[\n \"", "[ \"")
|
12
|
+
.gsub("\n ]", " ]")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/sumsub.rb
CHANGED
@@ -1,23 +1,36 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
########
|
4
|
+
# Gems #
|
5
|
+
########
|
6
|
+
|
3
7
|
require 'http'
|
4
|
-
require 'types'
|
5
8
|
require 'mime/types'
|
9
|
+
require 'dry-struct'
|
10
|
+
|
11
|
+
################
|
12
|
+
# Own requires #
|
13
|
+
################
|
14
|
+
|
15
|
+
require 'sumsub/version'
|
6
16
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
require 'sumsub/types'
|
18
|
+
require 'sumsub/message_signer'
|
19
|
+
require 'sumsub/configuration'
|
20
|
+
require 'sumsub/parser'
|
21
|
+
require 'sumsub/request'
|
22
|
+
require 'sumsub/webhook_sender'
|
23
|
+
require 'sumsub/struct/base_struct'
|
24
|
+
require 'sumsub/struct/error_response'
|
25
|
+
require 'sumsub/struct/address'
|
26
|
+
require 'sumsub/struct/info'
|
27
|
+
require 'sumsub/struct/applicant'
|
28
|
+
require 'sumsub/struct/applicant_update'
|
29
|
+
require 'sumsub/struct/document_metadata'
|
30
|
+
require 'sumsub/struct/review_result'
|
31
|
+
require 'sumsub/struct/webhook_payload'
|
20
32
|
|
33
|
+
module Sumsub
|
21
34
|
class << self
|
22
35
|
attr_accessor :configuration
|
23
36
|
end
|
data/sumsub-ruby-sdk.gemspec
CHANGED
@@ -29,17 +29,12 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
spec.
|
39
|
-
spec.
|
40
|
-
spec.add_dependency "rspec", "~> 3.10.0"
|
41
|
-
spec.add_dependency "pry", "~> 0.14.1"
|
42
|
-
spec.add_dependency "webmock", "~> 3.13.0"
|
43
|
-
spec.add_dependency "timecop", "~> 0.9.4"
|
44
|
-
spec.add_dependency "mime-types", "~> 3.3.1"
|
32
|
+
spec.add_dependency "http", ">= 4.0"
|
33
|
+
spec.add_dependency "dry-struct", "~> 1.4"
|
34
|
+
spec.add_dependency "mime-types", "~> 3.3"
|
35
|
+
|
36
|
+
spec.add_development_dependency "rspec", "~> 3.10"
|
37
|
+
spec.add_development_dependency "pry", "~> 0.14"
|
38
|
+
spec.add_development_dependency "webmock", "~> 3.13"
|
39
|
+
spec.add_development_dependency "timecop", "~> 0.9"
|
45
40
|
end
|
metadata
CHANGED
@@ -1,113 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sumsub-ruby-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo W. Ehresmann
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: dry-struct
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.4
|
33
|
+
version: '1.4'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.4
|
40
|
+
version: '1.4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: mime-types
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.
|
47
|
+
version: '3.3'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3.
|
54
|
+
version: '3.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
type: :
|
61
|
+
version: '3.10'
|
62
|
+
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: '3.10'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
76
|
-
type: :
|
75
|
+
version: '0.14'
|
76
|
+
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: '0.14'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: webmock
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
90
|
-
type: :
|
89
|
+
version: '3.13'
|
90
|
+
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: '3.13'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: timecop
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
104
|
-
type: :
|
103
|
+
version: '0.9'
|
104
|
+
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: '0.9'
|
111
111
|
description: SDK written in Ruby to handle SumSub API.
|
112
112
|
email:
|
113
113
|
- igoehresmann@gmail.com
|
@@ -139,8 +139,11 @@ files:
|
|
139
139
|
- lib/sumsub/struct/document_metadata.rb
|
140
140
|
- lib/sumsub/struct/error_response.rb
|
141
141
|
- lib/sumsub/struct/info.rb
|
142
|
+
- lib/sumsub/struct/review_result.rb
|
143
|
+
- lib/sumsub/struct/webhook_payload.rb
|
144
|
+
- lib/sumsub/types.rb
|
142
145
|
- lib/sumsub/version.rb
|
143
|
-
- lib/
|
146
|
+
- lib/sumsub/webhook_sender.rb
|
144
147
|
- sumsub-ruby-sdk.gemspec
|
145
148
|
homepage: https://github.com/rwehresmann/sumsub-ruby-sdk
|
146
149
|
licenses:
|
@@ -150,7 +153,7 @@ metadata:
|
|
150
153
|
homepage_uri: https://github.com/rwehresmann/sumsub-ruby-sdk
|
151
154
|
source_code_uri: https://github.com/rwehresmann/sumsub-ruby-sdk
|
152
155
|
changelog_uri: https://github.com/rwehresmann/sumsub-ruby-sdk/blob/master/CHANGELOG.md
|
153
|
-
post_install_message:
|
156
|
+
post_install_message:
|
154
157
|
rdoc_options: []
|
155
158
|
require_paths:
|
156
159
|
- lib
|
@@ -165,8 +168,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
168
|
- !ruby/object:Gem::Version
|
166
169
|
version: '0'
|
167
170
|
requirements: []
|
168
|
-
rubygems_version: 3.
|
169
|
-
signing_key:
|
171
|
+
rubygems_version: 3.3.7
|
172
|
+
signing_key:
|
170
173
|
specification_version: 4
|
171
174
|
summary: SumSub Ruby SDK
|
172
175
|
test_files: []
|
data/lib/types.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'dry-struct'
|
2
|
-
|
3
|
-
module Types
|
4
|
-
include Dry.Types()
|
5
|
-
|
6
|
-
# https://developers.sumsub.com/api-reference/#supported-document-types
|
7
|
-
IdDocTypes = Types::Strict::Symbol
|
8
|
-
.constructor(&:to_sym)
|
9
|
-
.enum(
|
10
|
-
:ID_CARD,
|
11
|
-
:PASSPORT,
|
12
|
-
:DRIVERS, # Driving license
|
13
|
-
:BANK_CARD,
|
14
|
-
:UTILITY_BILL,
|
15
|
-
:BANK_STATEMENT,
|
16
|
-
:SELFIE,
|
17
|
-
:VIDEO_SELFIE,
|
18
|
-
:PROFILE_IMAGE,
|
19
|
-
:ID_DOC_PHOTO,
|
20
|
-
:AGREEMENT,
|
21
|
-
:CONTRACT,
|
22
|
-
:RESIDENCE_PERMIT,
|
23
|
-
:EMPLOYMENT_CERTIFICATE,
|
24
|
-
:DRIVERS_TRANSLATION,
|
25
|
-
:INVESTOR_DOC,
|
26
|
-
:VEHICLE_REGISTRATION_CERTIFICATE,
|
27
|
-
:INCOME_SOURCE, # Proof of income
|
28
|
-
:PAYMENT_METHOD,
|
29
|
-
:OTHER,
|
30
|
-
nil,
|
31
|
-
)
|
32
|
-
|
33
|
-
IdDocSubType = Types::Strict::Symbol
|
34
|
-
.constructor(&:to_sym)
|
35
|
-
.enum(
|
36
|
-
:FRONT_SIDE,
|
37
|
-
:BACK_SIDE,
|
38
|
-
)
|
39
|
-
end
|