yoti_sandbox 1.0.0 → 1.4.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.md +8 -1
  4. data/lib/yoti_sandbox.rb +1 -0
  5. data/lib/yoti_sandbox/doc_scan.rb +25 -0
  6. data/lib/yoti_sandbox/doc_scan/client.rb +59 -0
  7. data/lib/yoti_sandbox/doc_scan/errors.rb +83 -0
  8. data/lib/yoti_sandbox/doc_scan/request/check/check.rb +115 -0
  9. data/lib/yoti_sandbox/doc_scan/request/check/document_authenticity_check.rb +29 -0
  10. data/lib/yoti_sandbox/doc_scan/request/check/document_check.rb +48 -0
  11. data/lib/yoti_sandbox/doc_scan/request/check/document_face_match_check.rb +29 -0
  12. data/lib/yoti_sandbox/doc_scan/request/check/document_text_data_check.rb +78 -0
  13. data/lib/yoti_sandbox/doc_scan/request/check/id_document_comparison_check.rb +56 -0
  14. data/lib/yoti_sandbox/doc_scan/request/check/liveness_check.rb +34 -0
  15. data/lib/yoti_sandbox/doc_scan/request/check/report/breakdown.rb +97 -0
  16. data/lib/yoti_sandbox/doc_scan/request/check/report/detail.rb +34 -0
  17. data/lib/yoti_sandbox/doc_scan/request/check/report/recommendation.rb +88 -0
  18. data/lib/yoti_sandbox/doc_scan/request/check/supplementary_document_text_data_check.rb +78 -0
  19. data/lib/yoti_sandbox/doc_scan/request/check/zoom_liveness_check.rb +36 -0
  20. data/lib/yoti_sandbox/doc_scan/request/check_reports.rb +182 -0
  21. data/lib/yoti_sandbox/doc_scan/request/document_filter.rb +77 -0
  22. data/lib/yoti_sandbox/doc_scan/request/response_config.rb +75 -0
  23. data/lib/yoti_sandbox/doc_scan/request/task/document_id_photo.rb +35 -0
  24. data/lib/yoti_sandbox/doc_scan/request/task/document_text_data_extraction_task.rb +170 -0
  25. data/lib/yoti_sandbox/doc_scan/request/task/supplementary_document_text_data_extraction_task.rb +152 -0
  26. data/lib/yoti_sandbox/doc_scan/request/task/text_data_extraction_reason.rb +78 -0
  27. data/lib/yoti_sandbox/doc_scan/request/task/text_data_extraction_recommendation.rb +86 -0
  28. data/lib/yoti_sandbox/doc_scan/request/task_results.rb +96 -0
  29. data/lib/yoti_sandbox/profile.rb +5 -0
  30. data/lib/yoti_sandbox/profile/age_verification.rb +7 -0
  31. data/lib/yoti_sandbox/profile/client.rb +8 -26
  32. data/lib/yoti_sandbox/profile/document_images.rb +69 -0
  33. data/lib/yoti_sandbox/profile/extra_data.rb +92 -0
  34. data/lib/yoti_sandbox/profile/third_party.rb +158 -0
  35. data/lib/yoti_sandbox/profile/token_request.rb +47 -6
  36. data/yoti_sandbox.gemspec +18 -5
  37. metadata +38 -18
  38. data/.github/ISSUE_TEMPLATE.md +0 -17
  39. data/.gitignore +0 -56
  40. data/CONTRIBUTING.md +0 -30
  41. data/Guardfile +0 -11
  42. data/Rakefile +0 -41
  43. data/rubocop.yml +0 -44
  44. data/yardstick.yml +0 -9
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yoti
4
+ module Sandbox
5
+ module DocScan
6
+ module Request
7
+ class DocumentFilter
8
+ #
9
+ # @param [Array<String>] document_types
10
+ # @param [Array<String>] country_codes
11
+ #
12
+ def initialize(document_types, country_codes)
13
+ Validation.assert_is_a(Array, document_types, 'document_types')
14
+ @document_types = document_types
15
+
16
+ Validation.assert_is_a(Array, country_codes, 'country_codes')
17
+ @country_codes = country_codes
18
+ end
19
+
20
+ def as_json(*_args)
21
+ {
22
+ document_types: @document_types,
23
+ country_codes: @country_codes
24
+ }
25
+ end
26
+
27
+ def to_json(*_args)
28
+ as_json.to_json
29
+ end
30
+
31
+ #
32
+ # @return [DocumentFilterBuilder]
33
+ #
34
+ def self.builder
35
+ DocumentFilterBuilder.new
36
+ end
37
+ end
38
+
39
+ class DocumentFilterBuilder
40
+ def initialize
41
+ @document_types = []
42
+ @country_codes = []
43
+ end
44
+
45
+ #
46
+ # @param [String] country_code
47
+ #
48
+ # @return [self]
49
+ #
50
+ def with_country_code(country_code)
51
+ Validation.assert_is_a(String, country_code, 'country_code')
52
+ @country_codes.push(country_code)
53
+ self
54
+ end
55
+
56
+ #
57
+ # @param [String] document_type
58
+ #
59
+ # @return [self]
60
+ #
61
+ def with_document_type(document_type)
62
+ Validation.assert_is_a(String, document_type, 'country_code')
63
+ @document_types.push(document_type)
64
+ self
65
+ end
66
+
67
+ #
68
+ # @return [DocumentFilter]
69
+ #
70
+ def build
71
+ DocumentFilter.new(@document_types, @country_codes)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yoti
4
+ module Sandbox
5
+ module DocScan
6
+ module Request
7
+ class ResponseConfig
8
+ #
9
+ # @param [TaskResults,nil] task_results
10
+ # @param [CheckReports] check_reports
11
+ #
12
+ def initialize(
13
+ task_results,
14
+ check_reports
15
+ )
16
+ Validation.assert_is_a(TaskResults, task_results, 'task_results', true)
17
+ @task_results = task_results
18
+
19
+ Validation.assert_is_a(CheckReports, check_reports, 'check_reports')
20
+ @check_reports = check_reports
21
+ end
22
+
23
+ def self.builder
24
+ ResponseConfigBuilder.new
25
+ end
26
+
27
+ def to_json(*_args)
28
+ as_json.to_json
29
+ end
30
+
31
+ def as_json(*_args)
32
+ {
33
+ task_results: @task_results,
34
+ check_reports: @check_reports
35
+ }.compact
36
+ end
37
+ end
38
+
39
+ class ResponseConfigBuilder
40
+ #
41
+ # @param [TaskResults] task_results
42
+ #
43
+ # @return [self]
44
+ #
45
+ def with_task_results(task_results)
46
+ Validation.assert_is_a(TaskResults, task_results, 'task_results')
47
+ @task_results = task_results
48
+ self
49
+ end
50
+
51
+ #
52
+ # @param [CheckReports] check_reports
53
+ #
54
+ # @return [self]
55
+ #
56
+ def with_check_reports(check_reports)
57
+ Validation.assert_is_a(CheckReports, check_reports, 'check_reports')
58
+ @check_reports = check_reports
59
+ self
60
+ end
61
+
62
+ #
63
+ # @return [ResponseConfig]
64
+ #
65
+ def build
66
+ ResponseConfig.new(
67
+ @task_results,
68
+ @check_reports
69
+ )
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'base64'
4
+
5
+ module Yoti
6
+ module Sandbox
7
+ module DocScan
8
+ module Request
9
+ class DocumentIdPhoto
10
+ #
11
+ # @param [String] content_type
12
+ # @param [bin] data
13
+ #
14
+ def initialize(content_type, data)
15
+ Validation.assert_is_a(String, content_type, 'content_type')
16
+ @content_type = content_type
17
+
18
+ @data = data
19
+ end
20
+
21
+ def to_json(*_args)
22
+ as_json.to_json
23
+ end
24
+
25
+ def as_json(*_args)
26
+ {
27
+ content_type: @content_type,
28
+ data: Base64.strict_encode64(@data)
29
+ }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,170 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Yoti
6
+ module Sandbox
7
+ module DocScan
8
+ module Request
9
+ class DocumentTextDataExtractionTask
10
+ #
11
+ # @param [DocumentTextDataExtractionTaskResult] result
12
+ # @param [DocumentFilter] document_filter
13
+ #
14
+ def initialize(result, document_filter)
15
+ Validation.assert_is_a(DocumentTextDataExtractionTaskResult, result, 'result')
16
+ @result = result
17
+
18
+ Validation.assert_is_a(DocumentFilter, document_filter, 'document_filter', true)
19
+ @document_filter = document_filter
20
+ end
21
+
22
+ def to_json(*_args)
23
+ as_json.to_json
24
+ end
25
+
26
+ def as_json(*_args)
27
+ json = {
28
+ result: @result.as_json
29
+ }
30
+ json[:document_filter] = @document_filter.as_json unless @document_filter.nil?
31
+ json
32
+ end
33
+
34
+ #
35
+ # @return [DocumentTextDataExtractionTaskBuilder]
36
+ #
37
+ def self.builder
38
+ DocumentTextDataExtractionTaskBuilder.new
39
+ end
40
+ end
41
+
42
+ class DocumentTextDataExtractionTaskResult
43
+ #
44
+ # @param [Hash,nil] document_fields
45
+ # @param [DocumentIdPhoto,nil] document_id_photo
46
+ # @param [String,nil] detected_country
47
+ # @param [TextDataExtractionRecommendation,nil] recommendation
48
+ #
49
+ def initialize(
50
+ document_fields,
51
+ document_id_photo = nil,
52
+ detected_country = nil,
53
+ recommendation = nil
54
+ )
55
+ unless document_fields.nil?
56
+ Validation.assert_is_a(Hash, document_fields, 'document_fields')
57
+ document_fields.each { |_k, v| Validation.assert_respond_to(:to_json, v, 'document_fields value') }
58
+ end
59
+ @document_fields = document_fields
60
+
61
+ Validation.assert_is_a(DocumentIdPhoto, document_id_photo, 'document_id_photo', true)
62
+ @document_id_photo = document_id_photo
63
+
64
+ Validation.assert_is_a(String, detected_country, 'detected_country', true)
65
+ @detected_country = detected_country
66
+
67
+ Validation.assert_is_a(TextDataExtractionRecommendation, recommendation, 'recommendation', true)
68
+ @recommendation = recommendation
69
+ end
70
+
71
+ def to_json(*_args)
72
+ as_json.to_json
73
+ end
74
+
75
+ def as_json(*_args)
76
+ {
77
+ document_fields: @document_fields,
78
+ document_id_photo: @document_id_photo,
79
+ detected_country: @detected_country,
80
+ recommendation: @recommendation
81
+ }.compact
82
+ end
83
+ end
84
+
85
+ class DocumentTextDataExtractionTaskBuilder
86
+ #
87
+ # @param [String] key
88
+ # @param [#to_json] value
89
+ #
90
+ # @return [self]
91
+ #
92
+ def with_document_field(key, value)
93
+ Validation.assert_is_a(String, key, 'key')
94
+ Validation.assert_respond_to(:to_json, value, 'value')
95
+ @document_fields ||= {}
96
+ @document_fields[key] = value
97
+ self
98
+ end
99
+
100
+ #
101
+ # @param [Hash] document_fields
102
+ #
103
+ # @return [self]
104
+ #
105
+ def with_document_fields(document_fields)
106
+ Validation.assert_is_a(Hash, document_fields, 'document_fields')
107
+ @document_fields = document_fields
108
+ self
109
+ end
110
+
111
+ #
112
+ # @param [DocumentFilter] document_filter
113
+ #
114
+ # @return [self]
115
+ #
116
+ def with_document_filter(document_filter)
117
+ @document_filter = document_filter
118
+ self
119
+ end
120
+
121
+ #
122
+ # @param [String] content_type
123
+ # @param [bin] data
124
+ #
125
+ # @return [self]
126
+ #
127
+ def with_document_id_photo(content_type, data)
128
+ @document_id_photo = DocumentIdPhoto.new(content_type, data)
129
+ self
130
+ end
131
+
132
+ #
133
+ # @param [TextDataExtractionRecommendation] recommendation
134
+ #
135
+ # @return [self]
136
+ #
137
+ def with_recommendation(recommendation)
138
+ Validation.assert_is_a(TextDataExtractionRecommendation, recommendation, 'recommendation')
139
+ @recommendation = recommendation
140
+ self
141
+ end
142
+
143
+ #
144
+ # @param [String] detected_country
145
+ #
146
+ # @return [self]
147
+ #
148
+ def with_detected_country(detected_country)
149
+ Validation.assert_is_a(String, detected_country, 'detected_country')
150
+ @detected_country = detected_country
151
+ self
152
+ end
153
+
154
+ #
155
+ # @return [DocumentTextDataExtractionTask]
156
+ #
157
+ def build
158
+ result = DocumentTextDataExtractionTaskResult.new(
159
+ @document_fields,
160
+ @document_id_photo,
161
+ @detected_country,
162
+ @recommendation
163
+ )
164
+ DocumentTextDataExtractionTask.new(result, @document_filter)
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,152 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Yoti
6
+ module Sandbox
7
+ module DocScan
8
+ module Request
9
+ class SupplementaryDocumentTextDataExtractionTask
10
+ #
11
+ # @param [SupplementaryDocumentTextDataExtractionTaskResult] result
12
+ # @param [DocumentFilter] document_filter
13
+ #
14
+ def initialize(result, document_filter)
15
+ Validation.assert_is_a(SupplementaryDocumentTextDataExtractionTaskResult, result, 'result')
16
+ @result = result
17
+
18
+ Validation.assert_is_a(DocumentFilter, document_filter, 'document_filter', true)
19
+ @document_filter = document_filter
20
+ end
21
+
22
+ def to_json(*_args)
23
+ as_json.to_json
24
+ end
25
+
26
+ def as_json(*_args)
27
+ json = {
28
+ result: @result.as_json
29
+ }
30
+ json[:document_filter] = @document_filter.as_json unless @document_filter.nil?
31
+ json
32
+ end
33
+
34
+ #
35
+ # @return [SupplementaryDocumentTextDataExtractionTaskBuilder]
36
+ #
37
+ def self.builder
38
+ SupplementaryDocumentTextDataExtractionTaskBuilder.new
39
+ end
40
+ end
41
+
42
+ class SupplementaryDocumentTextDataExtractionTaskResult
43
+ #
44
+ # @param [Hash,nil] document_fields
45
+ # @param [String,nil] detected_country
46
+ # @param [TextDataExtractionRecommendation,nil] recommendation
47
+ #
48
+ def initialize(
49
+ document_fields,
50
+ detected_country = nil,
51
+ recommendation = nil
52
+ )
53
+ unless document_fields.nil?
54
+ Validation.assert_is_a(Hash, document_fields, 'document_fields')
55
+ document_fields.each { |_k, v| Validation.assert_respond_to(:to_json, v, 'document_fields value') }
56
+ end
57
+ @document_fields = document_fields
58
+
59
+ Validation.assert_is_a(String, detected_country, 'detected_country', true)
60
+ @detected_country = detected_country
61
+
62
+ Validation.assert_is_a(TextDataExtractionRecommendation, recommendation, 'recommendation', true)
63
+ @recommendation = recommendation
64
+ end
65
+
66
+ def to_json(*_args)
67
+ as_json.to_json
68
+ end
69
+
70
+ def as_json(*_args)
71
+ {
72
+ document_fields: @document_fields,
73
+ detected_country: @detected_country,
74
+ recommendation: @recommendation
75
+ }.compact
76
+ end
77
+ end
78
+
79
+ class SupplementaryDocumentTextDataExtractionTaskBuilder
80
+ #
81
+ # @param [String] key
82
+ # @param [#to_json] value
83
+ #
84
+ # @return [self]
85
+ #
86
+ def with_document_field(key, value)
87
+ Validation.assert_is_a(String, key, 'key')
88
+ Validation.assert_respond_to(:to_json, value, 'value')
89
+ @document_fields ||= {}
90
+ @document_fields[key] = value
91
+ self
92
+ end
93
+
94
+ #
95
+ # @param [Hash] document_fields
96
+ #
97
+ # @return [self]
98
+ #
99
+ def with_document_fields(document_fields)
100
+ Validation.assert_is_a(Hash, document_fields, 'document_fields')
101
+ @document_fields = document_fields
102
+ self
103
+ end
104
+
105
+ #
106
+ # @param [DocumentFilter] document_filter
107
+ #
108
+ # @return [self]
109
+ #
110
+ def with_document_filter(document_filter)
111
+ @document_filter = document_filter
112
+ self
113
+ end
114
+
115
+ #
116
+ # @param [TextDataExtractionRecommendation] recommendation
117
+ #
118
+ # @return [self]
119
+ #
120
+ def with_recommendation(recommendation)
121
+ Validation.assert_is_a(TextDataExtractionRecommendation, recommendation, 'recommendation')
122
+ @recommendation = recommendation
123
+ self
124
+ end
125
+
126
+ #
127
+ # @param [String] detected_country
128
+ #
129
+ # @return [self]
130
+ #
131
+ def with_detected_country(detected_country)
132
+ Validation.assert_is_a(String, detected_country, 'detected_country')
133
+ @detected_country = detected_country
134
+ self
135
+ end
136
+
137
+ #
138
+ # @return [SupplementaryDocumentTextDataExtractionTask]
139
+ #
140
+ def build
141
+ result = SupplementaryDocumentTextDataExtractionTaskResult.new(
142
+ @document_fields,
143
+ @detected_country,
144
+ @recommendation
145
+ )
146
+ SupplementaryDocumentTextDataExtractionTask.new(result, @document_filter)
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end