youlend 1.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.
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faker'
4
+
5
+ module Youlend
6
+ class LeadGenerator
7
+ def self.generate
8
+ new.generate
9
+ end
10
+
11
+ def initialize
12
+ Faker::Config.locale = 'en-GB'
13
+
14
+ generate
15
+ end
16
+
17
+ # Mandatory fields:
18
+ # * CompanyName
19
+ # * CompanyType (ltd, plc, llp, dac, soleTrader, aps, as, ks, ivs and is)
20
+ # * MonthsTrading
21
+ # * CountryISOCode (GBR, DNK and IRE)
22
+ # * KeyContactName
23
+ # * ThirdPartyLeadId
24
+ # * RegisteredAddress
25
+ # * ContactPhoneNumber
26
+ # * MonthlyCardRevenue (must be greater than or equal to '1000')
27
+ # * ContactEmailAddress
28
+ # * LoanCurrencyISOCode (ISO 4217 currency code. Valid codes are GBP, EUR and DKK)
29
+ # * ThirdPartyCustomerId
30
+ def generate
31
+ {
32
+ companyName: 'HOKO LTD',
33
+ companyType: 'ltd',
34
+ monthsTrading: rand(3..10),
35
+ countryISOCode: 'GBR',
36
+ keyContactName: Faker::Name.name,
37
+ thirdPartyLeadId: SecureRandom.uuid,
38
+ registeredAddress: address,
39
+ contactPhoneNumber: Faker::PhoneNumber.phone_number,
40
+ monthlyCardRevenue: 10_000,
41
+ contactEmailAddress: Faker::Internet.email,
42
+ loanCurrencyISOCode: 'GBP',
43
+ thirdPartyCustomerId: SecureRandom.uuid,
44
+ companyNumber: '09525857', # optional
45
+ notificationURL: Faker::Internet.url, # optional
46
+ thirdPartyMerchantId: SecureRandom.uuid # optional
47
+ }
48
+ end
49
+
50
+ private
51
+
52
+ def address
53
+ {
54
+ line1: Faker::Address.street_address,
55
+ line2: Faker::Address.secondary_address,
56
+ city: 'London',
57
+ region: 'London',
58
+ areaCode: Faker::Address.zip_code,
59
+ country: 'UK'
60
+ }
61
+ end
62
+ end
63
+ end
File without changes
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faker'
4
+
5
+ module Youlend
6
+ class MerchantGenerator
7
+ def self.generate
8
+ new.generate
9
+ end
10
+
11
+ def initialize
12
+ Faker::Config.locale = 'en-GB'
13
+
14
+ generate
15
+ end
16
+
17
+ # Mandatory fields:
18
+ # * CompanyName
19
+ # * CompanyType (ltd, plc, llp, dac, partnership, soleTrader, aps, as, ks, ivs and is)
20
+ # * CompanyNumber
21
+ # * FinancialData
22
+ # * CountryISOCode (GBR, DNK and IRE)
23
+ # * LoanCurrencyISOCode (ISO 4217 currency code. Valid codes are GBP, EUR and DKK)
24
+ # * ThirdPartyMerchantId
25
+ def generate
26
+ {
27
+ companyName: 'HOKO LTD',
28
+ companyType: 'ltd',
29
+ companyNumber: '09525857',
30
+ financialData: financial_data,
31
+ countryISOCode: 'GBR',
32
+ loanCurrencyISOCode: 'GBP',
33
+ thirdPartyMerchantId: SecureRandom.uuid,
34
+ significantPersons: [significant_person], # optional
35
+ contactEmailAddress: 'oterosantos@gmail.com' # optional
36
+ }
37
+ end
38
+
39
+ private
40
+
41
+ def financial_data
42
+ {
43
+ monthlyCardRevenue: 0,
44
+ monthlyValueOfPurchaseTransactions: 0,
45
+ monthlyRevenueFromInvoices: 0,
46
+ paymentData: payment_data
47
+ }
48
+ end
49
+
50
+ def payment_data
51
+ (1..12).to_a.map do |month|
52
+ formatted_month = format('%02<month>d', month: month)
53
+
54
+ {
55
+ paymentDate: "#{Date.today.year - 1}-#{formatted_month}-01",
56
+ amount: 5000,
57
+ currencyISOCode: 'GBP'
58
+ }
59
+ end
60
+ end
61
+
62
+ def significant_person
63
+ {
64
+ firstName: Faker::Name.first_name,
65
+ surname: Faker::Name.last_name,
66
+ address: address,
67
+ dateOfBirth: Date.parse('1980-01-01').to_s
68
+ }
69
+ end
70
+
71
+ def address
72
+ {
73
+ line1: Faker::Address.street_address,
74
+ line2: Faker::Address.secondary_address,
75
+ city: 'London',
76
+ region: 'London',
77
+ areaCode: Faker::Address.zip_code,
78
+ country: 'UK'
79
+ }
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Youlend
4
+ class PathSanitizer
5
+ # Removes any leading '/' and guarantees an ending '/'
6
+ def self.sanitize(path)
7
+ parts = path.split('/').reject(&:empty?)
8
+ new_path = parts.join('/')
9
+
10
+ [new_path, '/'].join
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Following the API description here: https://staging.youlendapi.com/prequalification/index.html
4
+ module Youlend
5
+ class Quote
6
+ def self.pre_qualification(params)
7
+ response = Youlend.connection.post('/prequalification/Requests', :prequalification, params)
8
+
9
+ # If we got back a response but all the funded amounts are 0.0 it means that the load was
10
+ # actually rejected! We'll replace the response body with an error message instead and change
11
+ # the success code.
12
+ if loan_accepted?(response.body)
13
+ response
14
+ else
15
+ response.http_response.env.status = 422
16
+ response.http_response.env.body = { error: 'Rejected', error_description: 'Loan was rejected' }
17
+ response
18
+ end
19
+ end
20
+
21
+ def self.loan_accepted?(data)
22
+ return false unless data[:loanOptions]
23
+ options = data[:loanOptions]
24
+
25
+ funded_amounts = options.map { |option| option[:fundedAmount] }
26
+
27
+ funded_amounts.any?(&:positive?)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ module Youlend
6
+ class Response
7
+ extend Forwardable
8
+
9
+ attr_reader :http_response
10
+ def_delegators :@http_response, :headers, :body, :status, :success?
11
+
12
+ def initialize(http_response)
13
+ @http_response = http_response
14
+ end
15
+
16
+ def unauthorized?
17
+ status == 401
18
+ end
19
+
20
+ def token_expired?
21
+ auth_header = @http_response.headers['www-authenticate']
22
+
23
+ return false unless auth_header
24
+
25
+ auth_header.match?(/.*token is expired.*/)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Youlend
4
+ VERSION = '1.0.0'
5
+ end
@@ -0,0 +1,84 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://youlend-stag.eu.auth0.com/oauth/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"grant_type":"client_credentials","client_id":"test","client_secret":null,"audience":"/prequalification"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ User-Agent:
13
+ - ruby-youlend-1.0.0
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 401
21
+ message: Unauthorized
22
+ headers:
23
+ Date:
24
+ - Tue, 02 Feb 2021 13:30:34 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Content-Length:
28
+ - '60'
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - __cf_bm=b86d644328e734a89744d6ab0c5ab572c0111eb1-1612272634-1800-AcGEpbRAnosUxswpSXM+JAqOBtuUgVfOzH1IugvEMHcHIsTDjoQ1XXEiXASfhswbTP1gXQLtpq79QNhCRMd3i88=;
33
+ path=/; expires=Tue, 02-Feb-21 14:00:34 GMT; domain=.eu.auth0.com; HttpOnly;
34
+ Secure; SameSite=None
35
+ - __cfduid=db76a7c8db86f5fd148669281a4fd0fca1612272634; expires=Thu, 04-Mar-21
36
+ 13:30:34 GMT; path=/; domain=.eu.auth0.com; HttpOnly; SameSite=Lax; Secure
37
+ - did=s%3Av0%3Ad446bdc0-655a-11eb-9745-d92175d2cd95.IicDICUYKjaHmwetynHVcGPlmOwmulS%2BU6pKfHrGcvE;
38
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:30:34 GMT; HttpOnly;
39
+ Secure; SameSite=None
40
+ - did_compat=s%3Av0%3Ad446bdc0-655a-11eb-9745-d92175d2cd95.IicDICUYKjaHmwetynHVcGPlmOwmulS%2BU6pKfHrGcvE;
41
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:30:34 GMT; HttpOnly;
42
+ Secure
43
+ Cf-Ray:
44
+ - 61b4447ece99da6a-LIS
45
+ Cache-Control:
46
+ - private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-transform
47
+ Strict-Transport-Security:
48
+ - max-age=31536000
49
+ Cf-Cache-Status:
50
+ - DYNAMIC
51
+ Cf-Request-Id:
52
+ - '080489233a0000da6ab2a8b000000001'
53
+ Expect-Ct:
54
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
55
+ Ot-Baggage-Auth0-Request-Id:
56
+ - 61b4447ece99da6a
57
+ Ot-Tracer-Sampled:
58
+ - 'true'
59
+ Ot-Tracer-Spanid:
60
+ - 7ca1b23302f70745
61
+ Ot-Tracer-Traceid:
62
+ - 4774272523010f8a
63
+ X-Auth0-Requestid:
64
+ - 9105d826c668167fdfd4
65
+ X-Content-Type-Options:
66
+ - nosniff
67
+ X-Ratelimit-Limit:
68
+ - '30'
69
+ X-Ratelimit-Remaining:
70
+ - '29'
71
+ X-Ratelimit-Reset:
72
+ - '1612272635'
73
+ Vary:
74
+ - Accept-Encoding
75
+ Server:
76
+ - cloudflare
77
+ Alt-Svc:
78
+ - h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400
79
+ body:
80
+ encoding: UTF-8
81
+ string: '{"error":"access_denied","error_description":"Unauthorized"}'
82
+ http_version:
83
+ recorded_at: Tue, 02 Feb 2021 13:30:34 GMT
84
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,86 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://youlend-stag.eu.auth0.com/oauth/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"grant_type":"client_credentials","client_id":"<CLIENT_ID>","client_secret":"<CLIENT_SECRET>","audience":"https://staging.youlendapi.com/onboarding"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ User-Agent:
13
+ - ruby-youlend-1.0.0
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Date:
24
+ - Tue, 02 Feb 2021 13:24:57 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - __cf_bm=e6a4378af86d22825e034680d08e42422cad86a0-1612272297-1800-AcsFVk6Zv0PJF3XHlWZ8G77qJ8cvjPf6Aku6MvwFjMinViAvIKbeV3urOJ3KxhRsxRt1g/woJ0OywLZhWe4Smkw=;
33
+ path=/; expires=Tue, 02-Feb-21 13:54:57 GMT; domain=.eu.auth0.com; HttpOnly;
34
+ Secure; SameSite=None
35
+ - __cfduid=d0401db464e44077ae99de37e2a271a0f1612272296; expires=Thu, 04-Mar-21
36
+ 13:24:56 GMT; path=/; domain=.eu.auth0.com; HttpOnly; SameSite=Lax; Secure
37
+ - did=s%3Av0%3A0af87850-655a-11eb-98e7-893d431ee561.a4UtjYsy2su3wNuzKHvF5c6FwubT%2Bdtr3hwRaI1cK%2F4;
38
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:24:57 GMT; HttpOnly;
39
+ Secure; SameSite=None
40
+ - did_compat=s%3Av0%3A0af87850-655a-11eb-98e7-893d431ee561.a4UtjYsy2su3wNuzKHvF5c6FwubT%2Bdtr3hwRaI1cK%2F4;
41
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:24:57 GMT; HttpOnly;
42
+ Secure
43
+ Cf-Ray:
44
+ - 61b43c400c3d5d43-LIS
45
+ Cache-Control:
46
+ - no-store
47
+ Strict-Transport-Security:
48
+ - max-age=31536000
49
+ Vary:
50
+ - Accept-Encoding
51
+ Cf-Cache-Status:
52
+ - DYNAMIC
53
+ Cf-Request-Id:
54
+ - '080483fc0a00005d43a9a02000000001'
55
+ Expect-Ct:
56
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
57
+ Ot-Baggage-Auth0-Request-Id:
58
+ - 61b43c400c3d5d43
59
+ Ot-Tracer-Sampled:
60
+ - 'true'
61
+ Ot-Tracer-Spanid:
62
+ - 1176407e7e758d00
63
+ Ot-Tracer-Traceid:
64
+ - 3f5af5df1055e780
65
+ Pragma:
66
+ - no-cache
67
+ X-Auth0-Requestid:
68
+ - 770c64fa80205df8e5b4
69
+ X-Content-Type-Options:
70
+ - nosniff
71
+ X-Ratelimit-Limit:
72
+ - '30'
73
+ X-Ratelimit-Remaining:
74
+ - '29'
75
+ X-Ratelimit-Reset:
76
+ - '1612272298'
77
+ Server:
78
+ - cloudflare
79
+ Alt-Svc:
80
+ - h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400
81
+ body:
82
+ encoding: ASCII-8BIT
83
+ string: '{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik0wUXdOMEl5TnpRMVJrRXhNa1pGTlVWRU5UQTJRalV6UWtRMVJUY3dORE0xUVVVM05rTkVRZyJ9.eyJodHRwOi8veW91bGVuZC5jb20vY2xhaW1zL2xlbmRpbmdQYXJ0bmVySWQiOiJkOGJmZTcwMy1lODBlLTRlMzUtYmFhYS1mZDk2MWU3ZGZlZTkiLCJpc3MiOiJodHRwczovL3lvdWxlbmQtc3RhZy5ldS5hdXRoMC5jb20vIiwic3ViIjoidXpLVEcyQ0NBZkFZQ0pGU0I3N3ZXRlVOelVOOHZxdlhAY2xpZW50cyIsImF1ZCI6Imh0dHBzOi8vc3RhZ2luZy55b3VsZW5kYXBpLmNvbS9vbmJvYXJkaW5nIiwiaWF0IjoxNjEyMjcyMjk3LCJleHAiOjE2MTIzNTg2OTcsImF6cCI6InV6S1RHMkNDQWZBWUNKRlNCNzd2V0ZVTnpVTjh2cXZYIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.lcYAhbXgtTnOBE528d5mPu7CD_FUefSnRwIK9u1rdg-CcRCflLmesALTJjS-VbE0kotT_PAU9n2CuLAbsK3XbORkg8doxKZG_1mNeSxuqCYrcd-nOPtxnKUXuRrCIZoogzmt9gt350skue_6YSKVjqeqeGetzyOdoitiJEms2rkuzMqkfNlTqouXKjYKHFIG6tUg4oBUlrvjwDvAXaLmZIyxpSkihrqCG2_5cvzrmtZmffwJvFtPVYKyufgtZm66NIPiitw_NfTtcU1ZggPBgJyjjGJKL6XD--mJqoaGEzWUncyJEOuONmqm_m_H0LuCfb5OQMLkDbQuqo_fwsixfA","expires_in":86400,"token_type":"Bearer"}'
84
+ http_version:
85
+ recorded_at: Tue, 02 Feb 2021 13:24:57 GMT
86
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,86 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://youlend-stag.eu.auth0.com/oauth/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"grant_type":"client_credentials","client_id":"<CLIENT_ID>","client_secret":"<CLIENT_SECRET>","audience":"https://staging.youlendapi.com/prequalification"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ User-Agent:
13
+ - ruby-youlend-1.0.0
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Date:
24
+ - Tue, 02 Feb 2021 13:24:56 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - __cf_bm=1f04630e67aebd3e63c5ae209b26c60da4cebc96-1612272296-1800-AdPv0nCo/T4gCqXZONdqjcajKW+5GA8gigo3PBVPwP9olp1ZX6yXJmJJHCDL3+Upyon3Vtg+uwZV+xYQR6VCteA=;
33
+ path=/; expires=Tue, 02-Feb-21 13:54:56 GMT; domain=.eu.auth0.com; HttpOnly;
34
+ Secure; SameSite=None
35
+ - __cfduid=d0091f13a90105b0ec98405f0a18a34981612272296; expires=Thu, 04-Mar-21
36
+ 13:24:56 GMT; path=/; domain=.eu.auth0.com; HttpOnly; SameSite=Lax; Secure
37
+ - did=s%3Av0%3A0ac50c40-655a-11eb-809c-3d9d54edece8.Msqyby98z4gqYXI9LxAWrR2xCemhgYWy8FphAoEUNlA;
38
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:24:56 GMT; HttpOnly;
39
+ Secure; SameSite=None
40
+ - did_compat=s%3Av0%3A0ac50c40-655a-11eb-809c-3d9d54edece8.Msqyby98z4gqYXI9LxAWrR2xCemhgYWy8FphAoEUNlA;
41
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:24:56 GMT; HttpOnly;
42
+ Secure
43
+ Cf-Ray:
44
+ - 61b43c3d3ec0da6e-LIS
45
+ Cache-Control:
46
+ - no-store
47
+ Strict-Transport-Security:
48
+ - max-age=31536000
49
+ Vary:
50
+ - Accept-Encoding
51
+ Cf-Cache-Status:
52
+ - DYNAMIC
53
+ Cf-Request-Id:
54
+ - '080483fa430000da6eb7b8a000000001'
55
+ Expect-Ct:
56
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
57
+ Ot-Baggage-Auth0-Request-Id:
58
+ - 61b43c3d3ec0da6e
59
+ Ot-Tracer-Sampled:
60
+ - 'true'
61
+ Ot-Tracer-Spanid:
62
+ - 625d9fdc0482fd38
63
+ Ot-Tracer-Traceid:
64
+ - 70edb07403066d5e
65
+ Pragma:
66
+ - no-cache
67
+ X-Auth0-Requestid:
68
+ - 48a985195b00b3397482
69
+ X-Content-Type-Options:
70
+ - nosniff
71
+ X-Ratelimit-Limit:
72
+ - '30'
73
+ X-Ratelimit-Remaining:
74
+ - '29'
75
+ X-Ratelimit-Reset:
76
+ - '1612272297'
77
+ Server:
78
+ - cloudflare
79
+ Alt-Svc:
80
+ - h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400
81
+ body:
82
+ encoding: ASCII-8BIT
83
+ string: '{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik0wUXdOMEl5TnpRMVJrRXhNa1pGTlVWRU5UQTJRalV6UWtRMVJUY3dORE0xUVVVM05rTkVRZyJ9.eyJodHRwOi8veW91bGVuZC5jb20vY2xhaW1zL2xlbmRpbmdQYXJ0bmVySWQiOiJkOGJmZTcwMy1lODBlLTRlMzUtYmFhYS1mZDk2MWU3ZGZlZTkiLCJpc3MiOiJodHRwczovL3lvdWxlbmQtc3RhZy5ldS5hdXRoMC5jb20vIiwic3ViIjoidXpLVEcyQ0NBZkFZQ0pGU0I3N3ZXRlVOelVOOHZxdlhAY2xpZW50cyIsImF1ZCI6Imh0dHBzOi8vc3RhZ2luZy55b3VsZW5kYXBpLmNvbS9wcmVxdWFsaWZpY2F0aW9uIiwiaWF0IjoxNjEyMjcyMjk2LCJleHAiOjE2MTIzNTg2OTYsImF6cCI6InV6S1RHMkNDQWZBWUNKRlNCNzd2V0ZVTnpVTjh2cXZYIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.ZSyjtXprsNihqIaCfB5JXjwPhBEi41VDyiWmZMu4XIBNrojuqYXnEljwFQIVEM9IiXrDMFx-b9RqLu1CyNtNKqexbIylQ6_jALCyENCeapXZ-MrHTPCPBs8NdnISeRNah-uvT0bMnOVUzpXW6D99aCoGp2LyLAPwqG-kbI05xpKuX_dtMn43To-67-0VCZijJBOT6fip5uJf7m1VTgHc7_Wc4B8gTYl0WUwtZokBqcviD0AzkQxShsdMI1vDZdXPvya475d1F-nfHg0XT4YJKoaJ8tvdClmBcUA4vJrHb1kN6mW7eGpcL-71fzwffJnZViras3FyY7_QOxUNn7FotA","expires_in":86400,"token_type":"Bearer"}'
84
+ http_version:
85
+ recorded_at: Tue, 02 Feb 2021 13:24:56 GMT
86
+ recorded_with: VCR 5.0.0