paypal-server-sdk 2.0.0 → 2.1.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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +73 -23
  3. data/bin/console +15 -0
  4. data/lib/paypal_server_sdk/client.rb +11 -0
  5. data/lib/paypal_server_sdk/configuration.rb +66 -0
  6. data/lib/paypal_server_sdk/controllers/base_controller.rb +1 -1
  7. data/lib/paypal_server_sdk/http/auth/o_auth2.rb +15 -0
  8. data/lib/paypal_server_sdk/http/proxy_settings.rb +9 -0
  9. data/lib/paypal_server_sdk/logging/configuration/api_logging_configuration.rb +181 -109
  10. data/lib/paypal_server_sdk/models/apple_pay_payment_data_type.rb +13 -0
  11. data/lib/paypal_server_sdk/models/application_context_user_action.rb +13 -0
  12. data/lib/paypal_server_sdk/models/authorization_incomplete_reason.rb +13 -0
  13. data/lib/paypal_server_sdk/models/authorization_status.rb +17 -0
  14. data/lib/paypal_server_sdk/models/avs_code.rb +35 -0
  15. data/lib/paypal_server_sdk/models/callback_events.rb +13 -0
  16. data/lib/paypal_server_sdk/models/capture_incomplete_reason.rb +23 -0
  17. data/lib/paypal_server_sdk/models/capture_status.rb +17 -0
  18. data/lib/paypal_server_sdk/models/capture_type.rb +6 -0
  19. data/lib/paypal_server_sdk/models/card_brand.rb +41 -0
  20. data/lib/paypal_server_sdk/models/card_type.rb +16 -0
  21. data/lib/paypal_server_sdk/models/card_verification_status.rb +13 -0
  22. data/lib/paypal_server_sdk/models/checkout_payment_intent.rb +13 -0
  23. data/lib/paypal_server_sdk/models/cvv_code.rb +25 -0
  24. data/lib/paypal_server_sdk/models/disbursement_mode.rb +13 -0
  25. data/lib/paypal_server_sdk/models/dispute_category.rb +13 -0
  26. data/lib/paypal_server_sdk/models/eci_flag.rb +17 -0
  27. data/lib/paypal_server_sdk/models/enrollment_status.rb +15 -0
  28. data/lib/paypal_server_sdk/models/experience_context_shipping_preference.rb +14 -0
  29. data/lib/paypal_server_sdk/models/experience_status.rb +15 -0
  30. data/lib/paypal_server_sdk/models/fulfillment_type.rb +15 -0
  31. data/lib/paypal_server_sdk/models/google_pay_authentication_method.rb +13 -0
  32. data/lib/paypal_server_sdk/models/google_pay_payment_method.rb +6 -0
  33. data/lib/paypal_server_sdk/models/interval_unit.rb +15 -0
  34. data/lib/paypal_server_sdk/models/item_category.rb +14 -0
  35. data/lib/paypal_server_sdk/models/liability_shift_indicator.rb +14 -0
  36. data/lib/paypal_server_sdk/models/link_http_method.rb +19 -0
  37. data/lib/paypal_server_sdk/models/mobile_return_flow.rb +13 -0
  38. data/lib/paypal_server_sdk/models/o_auth_provider_error.rb +17 -0
  39. data/lib/paypal_server_sdk/models/order_application_context_landing_page.rb +14 -0
  40. data/lib/paypal_server_sdk/models/order_application_context_shipping_preference.rb +14 -0
  41. data/lib/paypal_server_sdk/models/order_application_context_user_action.rb +13 -0
  42. data/lib/paypal_server_sdk/models/order_status.rb +17 -0
  43. data/lib/paypal_server_sdk/models/order_tracker_status.rb +13 -0
  44. data/lib/paypal_server_sdk/models/orders_card_verification_method.rb +15 -0
  45. data/lib/paypal_server_sdk/models/os_type.rb +14 -0
  46. data/lib/paypal_server_sdk/models/pa_res_status.rb +19 -0
  47. data/lib/paypal_server_sdk/models/patch_op.rb +17 -0
  48. data/lib/paypal_server_sdk/models/payee_payment_method_preference.rb +13 -0
  49. data/lib/paypal_server_sdk/models/payment_advice_code.rb +26 -0
  50. data/lib/paypal_server_sdk/models/payment_initiator.rb +13 -0
  51. data/lib/paypal_server_sdk/models/payment_token_status.rb +16 -0
  52. data/lib/paypal_server_sdk/models/paypal_experience_landing_page.rb +15 -0
  53. data/lib/paypal_server_sdk/models/paypal_experience_user_action.rb +13 -0
  54. data/lib/paypal_server_sdk/models/paypal_payment_token_customer_type.rb +13 -0
  55. data/lib/paypal_server_sdk/models/paypal_payment_token_usage_type.rb +13 -0
  56. data/lib/paypal_server_sdk/models/paypal_reference_id_type.rb +15 -0
  57. data/lib/paypal_server_sdk/models/paypal_wallet_account_verification_status.rb +13 -0
  58. data/lib/paypal_server_sdk/models/paypal_wallet_contact_preference.rb +14 -0
  59. data/lib/paypal_server_sdk/models/paypal_wallet_context_shipping_preference.rb +14 -0
  60. data/lib/paypal_server_sdk/models/paypal_wallet_vault_status.rb +14 -0
  61. data/lib/paypal_server_sdk/models/phone_type.rb +16 -0
  62. data/lib/paypal_server_sdk/models/plan_request_status.rb +14 -0
  63. data/lib/paypal_server_sdk/models/pricing_model.rb +14 -0
  64. data/lib/paypal_server_sdk/models/processor_response_code.rb +165 -0
  65. data/lib/paypal_server_sdk/models/reason_code.rb +19 -0
  66. data/lib/paypal_server_sdk/models/refund_incomplete_reason.rb +6 -0
  67. data/lib/paypal_server_sdk/models/refund_status.rb +15 -0
  68. data/lib/paypal_server_sdk/models/return_flow.rb +13 -0
  69. data/lib/paypal_server_sdk/models/seller_protection_status.rb +14 -0
  70. data/lib/paypal_server_sdk/models/setup_fee_failure_action.rb +13 -0
  71. data/lib/paypal_server_sdk/models/shipment_carrier.rb +1428 -1
  72. data/lib/paypal_server_sdk/models/shipping_type.rb +15 -0
  73. data/lib/paypal_server_sdk/models/standard_entry_class_code.rb +15 -0
  74. data/lib/paypal_server_sdk/models/store_in_vault_instruction.rb +6 -0
  75. data/lib/paypal_server_sdk/models/stored_payment_source_payment_type.rb +14 -0
  76. data/lib/paypal_server_sdk/models/stored_payment_source_usage_type.rb +14 -0
  77. data/lib/paypal_server_sdk/models/subscription_plan_status.rb +14 -0
  78. data/lib/paypal_server_sdk/models/subscription_pricing_model.rb +13 -0
  79. data/lib/paypal_server_sdk/models/subscriptions_card_brand.rb +36 -0
  80. data/lib/paypal_server_sdk/models/tax_id_type.rb +13 -0
  81. data/lib/paypal_server_sdk/models/tenure_type.rb +13 -0
  82. data/lib/paypal_server_sdk/models/token_type.rb +6 -0
  83. data/lib/paypal_server_sdk/models/upc_type.rb +18 -0
  84. data/lib/paypal_server_sdk/models/usage_pattern.rb +23 -0
  85. data/lib/paypal_server_sdk/models/vault_card_verification_method.rb +13 -0
  86. data/lib/paypal_server_sdk/models/vault_instruction_action.rb +13 -0
  87. data/lib/paypal_server_sdk/models/vault_status.rb +14 -0
  88. data/lib/paypal_server_sdk/models/vault_token_request_type.rb +6 -0
  89. data/lib/paypal_server_sdk/models/vault_user_action.rb +13 -0
  90. data/lib/paypal_server_sdk/models/venmo_payment_token_customer_type.rb +13 -0
  91. data/lib/paypal_server_sdk/models/venmo_payment_token_usage_pattern.rb +17 -0
  92. data/lib/paypal_server_sdk/models/venmo_payment_token_usage_type.rb +13 -0
  93. data/lib/paypal_server_sdk/models/venmo_vault_response_status.rb +14 -0
  94. data/lib/paypal_server_sdk/models/venmo_wallet_experience_context_shipping_preference.rb +14 -0
  95. data/lib/paypal_server_sdk/models/venmo_wallet_experience_context_user_action.rb +13 -0
  96. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 384df7b8cdbd6c07409b2de2c58d791cf3c734063bb265c725533294641dab43
4
- data.tar.gz: aa1e3012f01cf06e65da38895a2ce3dc11cf867a1971fe4f1f89401c87706ffd
3
+ metadata.gz: 716ca4b1a12121acd6e221becbf2d29c55063b4f8b46eb68b499a84d6c22a175
4
+ data.tar.gz: c875e40983c4bb398f4d40849540c2e3e8a612f94383ca70326bd7a5a24f7223
5
5
  SHA512:
6
- metadata.gz: bd7a3566df23ff352223eb346a73a35b5ec5d097ab40bd023d472ae12554b17b3d3bef6a5b2dd308b8b1e89de20f886c1f8c3b7ee2f581eb12e0dd80e99f3afb
7
- data.tar.gz: 2e4440a555149afce96d67f99b5adccc8f69b5653edb352d29105cc8b91a70345a537145cf8892879ad7c50127b256d299fa4617d3fef4e5d19b2c0dca32128e
6
+ metadata.gz: 96c1fd80ecdf37001dc6e351e81677e02740414aba53b4913a71c56a82a1bafcc5d5f55caf6af264a5e065fdbcfcb7ddd07875358c09b893087277016371a6a3
7
+ data.tar.gz: 0d5bb3db5f27cddfff1c1712fd14d0519108a9d5239605615f6ade8aa5c452cdf5b2cb59986e9e99066e44ea04042867c5c79491b4e21f10be0db6eddb228ebc
data/README.md CHANGED
@@ -22,20 +22,55 @@ The PayPal Server SDK provides integration access to the PayPal REST APIs. The A
22
22
  Install the gem from the command line:
23
23
 
24
24
  ```bash
25
- gem install paypal-server-sdk -v 2.0.0
25
+ gem install paypal-server-sdk -v 2.1.0
26
26
  ```
27
27
 
28
28
  Or add the gem to your Gemfile and run `bundle`:
29
29
 
30
30
  ```ruby
31
- gem 'paypal-server-sdk', '2.0.0'
31
+ gem 'paypal-server-sdk', '2.1.0'
32
32
  ```
33
33
 
34
- For additional gem details, see the [RubyGems page for the paypal-server-sdk gem](https://rubygems.org/gems/paypal-server-sdk/versions/2.0.0).
34
+ For additional gem details, see the [RubyGems page for the paypal-server-sdk gem](https://rubygems.org/gems/paypal-server-sdk/versions/2.1.0).
35
+
36
+ ## IRB Console Usage
37
+
38
+ You can explore the SDK interactively using IRB in two ways
39
+
40
+ ### 1. Use IRB with Installed Gem
41
+
42
+ Open your system terminal (Command Prompt, Git Bash or macOS Terminal) and type the following command to start the irb console.
43
+
44
+ ```bash
45
+ irb
46
+ ```
47
+
48
+ Now you can load the SDK in the IRB
49
+
50
+ ```ruby
51
+ require 'paypal_server_sdk'
52
+ include PaypalServerSdk
53
+ ```
54
+
55
+ ### 2. Use IRB within SDK
56
+
57
+ Open your system terminal (Command Prompt, Git Bash or macOS Terminal) and navigate to the root folder of SDK.
58
+
59
+ ```
60
+ cd path/to/paypal_server_sdk
61
+ ```
62
+
63
+ Now you can start the preconfigured irb console by running the following command
64
+
65
+ ```bash
66
+ ruby bin/console
67
+ ```
68
+
69
+ **_Note:_** This automatically loads the SDK from lib/
35
70
 
36
71
  ## Initialize the API Client
37
72
 
38
- **_Note:_** Documentation for the client can be found [here.](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/client.md)
73
+ **_Note:_** Documentation for the client can be found [here.](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/client.md)
39
74
 
40
75
  The following parameters are configurable for the API Client:
41
76
 
@@ -51,12 +86,14 @@ The following parameters are configurable for the API Client:
51
86
  | retry_statuses | `Array` | A list of HTTP statuses to retry. <br> **Default: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524]** |
52
87
  | retry_methods | `Array` | A list of HTTP methods to retry. <br> **Default: %i[get put]** |
53
88
  | http_callback | `HttpCallBack` | The Http CallBack allows defining callables for pre and post API calls. |
54
- | proxy_settings | [`ProxySettings`](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/proxy-settings.md) | Optional proxy configuration to route HTTP requests through a proxy server. |
55
- | logging_configuration | [`LoggingConfiguration`](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/logging-configuration.md) | The SDK logging configuration for API calls |
56
- | client_credentials_auth_credentials | [`ClientCredentialsAuthCredentials`](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/auth/oauth-2-client-credentials-grant.md) | The credential object for OAuth 2 Client Credentials Grant |
89
+ | proxy_settings | [`ProxySettings`](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/proxy-settings.md) | Optional proxy configuration to route HTTP requests through a proxy server. |
90
+ | logging_configuration | [`LoggingConfiguration`](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/logging-configuration.md) | The SDK logging configuration for API calls |
91
+ | client_credentials_auth_credentials | [`ClientCredentialsAuthCredentials`](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/auth/oauth-2-client-credentials-grant.md) | The credential object for OAuth 2 Client Credentials Grant |
57
92
 
58
93
  The API client can be initialized as follows:
59
94
 
95
+ ### Code-Based Client Initialization
96
+
60
97
  ```ruby
61
98
  require 'paypal_server_sdk'
62
99
  include PaypalServerSdk
@@ -79,6 +116,18 @@ client = Client.new(
79
116
  )
80
117
  ```
81
118
 
119
+ ### Environment-Based Client Initialization
120
+
121
+ ```ruby
122
+ require 'paypal_server_sdk'
123
+ include PaypalServerSdk
124
+
125
+ # Create client from environment
126
+ client = Client.from_env
127
+ ```
128
+
129
+ See the [`Environment-Based Client Initialization`](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/environment-based-client-initialization.md) section for details.
130
+
82
131
  ## Environments
83
132
 
84
133
  The SDK can be configured to use a different environment for making API calls. Available environments are:
@@ -94,34 +143,35 @@ The SDK can be configured to use a different environment for making API calls. A
94
143
 
95
144
  This API uses the following authentication schemes.
96
145
 
97
- * [`Oauth2 (OAuth 2 Client Credentials Grant)`](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/auth/oauth-2-client-credentials-grant.md)
146
+ * [`Oauth2 (OAuth 2 Client Credentials Grant)`](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/auth/oauth-2-client-credentials-grant.md)
98
147
 
99
148
  ## List of APIs
100
149
 
101
- * [Transactionsearch](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/controllers/transactionsearch.md)
102
- * [Orders](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/controllers/orders.md)
103
- * [Payments](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/controllers/payments.md)
104
- * [Vault](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/controllers/vault.md)
105
- * [Subscriptions](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/controllers/subscriptions.md)
150
+ * [Orders](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/controllers/orders.md)
151
+ * [Payments](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/controllers/payments.md)
152
+ * [Vault](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/controllers/vault.md)
153
+ * [Transaction Search](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/controllers/transaction-search.md)
154
+ * [Subscriptions](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/controllers/subscriptions.md)
106
155
 
107
156
  ## SDK Infrastructure
108
157
 
109
158
  ### Configuration
110
159
 
111
- * [ProxySettings](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/proxy-settings.md)
112
- * [AbstractLogger](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/abstract-logger.md)
113
- * [LoggingConfiguration](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/logging-configuration.md)
114
- * [RequestLoggingConfiguration](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/request-logging-configuration.md)
115
- * [ResponseLoggingConfiguration](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/response-logging-configuration.md)
160
+ * [ProxySettings](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/proxy-settings.md)
161
+ * [Environment-Based Client Initialization](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/environment-based-client-initialization.md)
162
+ * [AbstractLogger](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/abstract-logger.md)
163
+ * [LoggingConfiguration](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/logging-configuration.md)
164
+ * [RequestLoggingConfiguration](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/request-logging-configuration.md)
165
+ * [ResponseLoggingConfiguration](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/response-logging-configuration.md)
116
166
 
117
167
  ### HTTP
118
168
 
119
- * [HttpResponse](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/http-response.md)
120
- * [HttpRequest](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/http-request.md)
169
+ * [HttpResponse](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/http-response.md)
170
+ * [HttpRequest](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/http-request.md)
121
171
 
122
172
  ### Utilities
123
173
 
124
- * [ApiResponse](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/api-response.md)
125
- * [ApiHelper](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/api-helper.md)
126
- * [DateTimeHelper](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.0.0/doc/date-time-helper.md)
174
+ * [ApiResponse](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/api-response.md)
175
+ * [ApiHelper](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/api-helper.md)
176
+ * [DateTimeHelper](https://www.github.com/paypal/PayPal-Ruby-Server-SDK/tree/2.1.0/doc/date-time-helper.md)
127
177
 
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Load the lib folder into Ruby's load path
4
+ $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
5
+
6
+ # Require the gem
7
+ require 'paypal_server_sdk'
8
+
9
+ puts 'PaypalServerSdk SDK loaded!'
10
+ puts 'You can now create a client with: client = PaypalServerSdk::Client.new'
11
+ puts 'Or use from_env: client = PaypalServerSdk::Client.from_env'
12
+
13
+ # Start an interactive IRB session
14
+ require 'irb'
15
+ IRB.start
@@ -8,6 +8,10 @@ module PaypalServerSdk
8
8
  class Client
9
9
  include CoreLibrary
10
10
  attr_reader :config, :auth_managers
11
+
12
+ def user_agent_detail
13
+ config.user_agent_detail
14
+ end
11
15
 
12
16
  # Returns the configured authentication Oauth2 instance.
13
17
  def oauth2
@@ -94,5 +98,12 @@ module PaypalServerSdk
94
98
  @auth_managers['Oauth2'] = OAuth2.new(http_client_config.client_credentials_auth_credentials,
95
99
  global_config)
96
100
  end
101
+
102
+ # Creates a client directly from environment variables.
103
+ def self.from_env(**overrides)
104
+ default_config = Configuration.build_default_config_from_env
105
+ new_config = default_config.clone_with(**overrides)
106
+ new(config: new_config)
107
+ end
97
108
  end
98
109
  end
@@ -12,6 +12,21 @@ module PaypalServerSdk
12
12
  PRODUCTION = 'Production'.freeze,
13
13
  SANDBOX = 'Sandbox'.freeze
14
14
  ].freeze
15
+
16
+ # Converts a string or symbol into a valid Environment constant.
17
+ def self.from_value(value, default_value = PRODUCTION)
18
+ return default_value if value.nil?
19
+
20
+ str = value.to_s.strip.downcase
21
+ case str
22
+ when 'production' then PRODUCTION
23
+ when 'sandbox' then SANDBOX
24
+
25
+ else
26
+ warn "[Environment] Unknown environment '#{value}', falling back to #{default_value} "
27
+ default_value
28
+ end
29
+ end
15
30
  end
16
31
 
17
32
  # An enum for API servers.
@@ -19,6 +34,13 @@ module PaypalServerSdk
19
34
  SERVER = [
20
35
  DEFAULT = 'default'.freeze
21
36
  ].freeze
37
+
38
+ # Converts a string or symbol into a valid Server constant.
39
+ def self.from_value(value, default_value = DEFAULT)
40
+ return default_value if value.nil?
41
+
42
+ default_value
43
+ end
22
44
  end
23
45
 
24
46
  # All configuration including auth info and base URI for the API access
@@ -107,5 +129,49 @@ module PaypalServerSdk
107
129
  def get_base_uri(server = Server::DEFAULT)
108
130
  ENVIRONMENTS[environment][server].clone
109
131
  end
132
+
133
+ # Builds a Configuration instance using environment variables.
134
+ def self.build_default_config_from_env
135
+ # === Core environment ===
136
+ environment = Environment.from_value(ENV.fetch('ENVIRONMENT', 'sandbox'))
137
+ timeout = (ENV['TIMEOUT'] || 60).to_f
138
+ max_retries = (ENV['MAX_RETRIES'] || 0).to_i
139
+ retry_interval = (ENV['RETRY_INTERVAL'] || 1).to_f
140
+ backoff_factor = (ENV['BACKOFF_FACTOR'] || 2).to_f
141
+ retry_statuses = ENV.fetch('RETRY_STATUSES',
142
+ '[408, 413, 429, 500, 502, 503, 504, 521, 522, 524]').gsub(/[\[\]]/, '')
143
+ .split(',')
144
+ .map(&:strip)
145
+ .map do |item|
146
+ item.match?(/\A\d+\z/) ? item.to_i : item.downcase
147
+ end
148
+ retry_methods = ENV.fetch('RETRY_METHODS', '%i[get put]').gsub(/[\[\]]/, '')
149
+ .split(',')
150
+ .map(&:strip)
151
+ .map do |item|
152
+ item.match?(/\A\d+\z/) ? item.to_i : item.downcase
153
+ end
154
+
155
+ # === Authentication credentials ===
156
+ client_credentials_auth_credentials = ClientCredentialsAuthCredentials.from_env
157
+
158
+ # === Proxy settings ===
159
+ proxy_settings = ProxySettings.from_env
160
+ # === Logging Configuration ===
161
+ logging_configuration = LoggingConfiguration.from_env if LoggingConfiguration.any_logging_configured?
162
+
163
+ Configuration.new(
164
+ environment: environment,
165
+ timeout: timeout,
166
+ max_retries: max_retries,
167
+ retry_interval: retry_interval,
168
+ backoff_factor: backoff_factor,
169
+ retry_statuses: retry_statuses,
170
+ retry_methods: retry_methods,
171
+ client_credentials_auth_credentials: client_credentials_auth_credentials,
172
+ proxy_settings: proxy_settings,
173
+ logging_configuration: logging_configuration
174
+ )
175
+ end
110
176
  end
111
177
  end
@@ -10,7 +10,7 @@ module PaypalServerSdk
10
10
  attr_accessor :config, :http_call_back
11
11
 
12
12
  def self.user_agent
13
- 'PayPal REST API Ruby SDK, Version: 2.0.0, on OS {os-info}'
13
+ 'PayPal REST API Ruby SDK, Version: 2.1.0, on OS {os-info}'
14
14
  end
15
15
 
16
16
  def self.user_agent_parameters
@@ -114,6 +114,21 @@ module PaypalServerSdk
114
114
  @o_auth_clock_skew = o_auth_clock_skew
115
115
  end
116
116
 
117
+ def self.from_env
118
+ o_auth_client_id = ENV['O_AUTH_CLIENT_ID']
119
+ o_auth_client_secret = ENV['O_AUTH_CLIENT_SECRET']
120
+ o_auth_clock_skew = ENV['O_AUTH_CLOCK_SKEW']
121
+ all_nil = [
122
+ o_auth_client_id,
123
+ o_auth_client_secret
124
+ ].all?(&:nil?)
125
+ return nil if all_nil
126
+
127
+ new(o_auth_client_id: o_auth_client_id,
128
+ o_auth_client_secret: o_auth_client_secret,
129
+ o_auth_clock_skew: o_auth_clock_skew)
130
+ end
131
+
117
132
  def clone_with(o_auth_client_id: nil, o_auth_client_secret: nil,
118
133
  o_auth_token: nil, o_auth_token_provider: nil,
119
134
  o_auth_on_token_update: nil, o_auth_clock_skew: nil)
@@ -9,5 +9,14 @@ module PaypalServerSdk
9
9
  # including optional basic authentication.
10
10
  #
11
11
  class ProxySettings < CoreLibrary::ProxySettings
12
+ def self.from_env
13
+ address = ENV['PROXY_ADDRESS']
14
+ port = ENV['PROXY_PORT']
15
+ username = ENV['PROXY_USERNAME']
16
+ password = ENV['PROXY_PASSWORD']
17
+ return nil if address.nil? || address.strip.empty?
18
+
19
+ new(address: address, port: port, username: username, password: password)
20
+ end
12
21
  end
13
22
  end
@@ -3,112 +3,184 @@
3
3
  # This file was automatically generated by APIMATIC v3.0
4
4
  # ( https://www.apimatic.io ).
5
5
 
6
- module PaypalServerSdk
7
- # Initializes a new instance of RequestLoggingConfiguration.
8
- class RequestLoggingConfiguration < CoreLibrary::ApiRequestLoggingConfiguration
9
- # @param log_body [Boolean] Indicates whether the message body should be logged. Default is false.
10
- # @param log_headers [Boolean] Indicates whether the message headers should be logged. Default is false.
11
- # @param headers_to_exclude [Array<String>] Array of headers not displayed in logging. Default is an empty array.
12
- # @param headers_to_include [Array<String>] Array of headers to be displayed in logging. Default is an empty array.
13
- # @param headers_to_unmask [Array<String>] Array of headers which values are non-sensitive to display in logging.
14
- # Default is an empty array.
15
- def initialize(log_body: false, log_headers: false, headers_to_include: nil,
16
- headers_to_exclude: nil, headers_to_unmask: nil,
17
- include_query_in_path: false)
18
- super(
19
- log_body,
20
- log_headers,
21
- headers_to_exclude,
22
- headers_to_include,
23
- headers_to_unmask,
24
- include_query_in_path
25
- )
26
- end
27
-
28
- def clone_with(log_body: nil, log_headers: nil, headers_to_include: nil,
29
- headers_to_exclude: nil, headers_to_unmask: nil, include_query_in_path: nil)
30
- log_body ||= self.log_body
31
- log_headers ||= self.log_headers
32
- headers_to_include ||= self.headers_to_include
33
- headers_to_exclude ||= self.headers_to_exclude
34
- headers_to_unmask ||= self.headers_to_unmask
35
- include_query_in_path ||= self.include_query_in_path
36
-
37
- RequestLoggingConfiguration.class.new(log_body: log_body, log_headers: log_headers,
38
- headers_to_include: headers_to_include,
39
- headers_to_exclude: headers_to_exclude,
40
- headers_to_unmask: headers_to_unmask,
41
- include_query_in_path: include_query_in_path)
42
- end
43
- end
44
-
45
- # Initializes a new instance of ResponseLoggingConfiguration.
46
- class ResponseLoggingConfiguration < CoreLibrary::ApiResponseLoggingConfiguration
47
- # @param log_body [Boolean] Indicates whether the message body should be logged. Default is false.
48
- # @param log_headers [Boolean] Indicates whether the message headers should be logged. Default is false.
49
- # @param headers_to_exclude [Array<String>] Array of headers not displayed in logging. Default is an empty array.
50
- # @param headers_to_include [Array<String>] Array of headers to be displayed in logging. Default is an empty array.
51
- # @param headers_to_unmask [Array<String>] Array of headers which values are non-sensitive to display in logging.
52
- # Default is an empty array.
53
- def initialize(log_body: false, log_headers: false, headers_to_include: nil,
54
- headers_to_exclude: nil, headers_to_unmask: nil)
55
- super(
56
- log_body,
57
- log_headers,
58
- headers_to_exclude,
59
- headers_to_include,
60
- headers_to_unmask
61
- )
62
- end
63
-
64
- def clone_with(log_body: nil, log_headers: nil, headers_to_include: nil,
65
- headers_to_exclude: nil, headers_to_unmask: nil)
66
- log_body ||= self.log_body
67
- log_headers ||= self.log_headers
68
- headers_to_include ||= self.headers_to_include
69
- headers_to_exclude ||= self.headers_to_exclude
70
- headers_to_unmask ||= self.headers_to_unmask
71
-
72
- ResponseLoggingConfiguration.new(log_body: log_body, log_headers: log_headers,
73
- headers_to_include: headers_to_include,
74
- headers_to_exclude: headers_to_exclude,
75
- headers_to_unmask: headers_to_unmask)
76
- end
77
- end
78
-
79
- # Initializes a new instance of LoggingConfiguration.
80
- class LoggingConfiguration < CoreLibrary::ApiLoggingConfiguration
81
- # @param logger [LoggerInterface] The logger to use for logging messages.
82
- # @param log_level [LogLevel] The log level to determine which messages should be logged.
83
- # @param request_logging_config [RequestLoggingConfiguration] Options for logging HTTP requests.
84
- # @param response_logging_config [ResponseLoggingConfiguration] Options for logging HTTP responses.
85
- # @param mask_sensitive_headers [Boolean] Indicates whether sensitive headers should be masked in logged messages.
86
- def initialize(logger: nil, log_level: nil, mask_sensitive_headers: true,
87
- request_logging_config: nil,
88
- response_logging_config: nil)
89
- request_logging_config ||= RequestLoggingConfiguration.new
90
- response_logging_config ||= ResponseLoggingConfiguration.new
91
- super(
92
- logger,
93
- log_level,
94
- request_logging_config,
95
- response_logging_config,
96
- mask_sensitive_headers
97
- )
98
- end
99
-
100
- def clone_with(logger: nil, log_level: nil, mask_sensitive_headers: nil,
101
- request_logging_config: nil, response_logging_config: nil)
102
- logger ||= self.logger
103
- log_level ||= self.log_level
104
- mask_sensitive_headers = self.mask_sensitive_headers ||= mask_sensitive_headers
105
- request_logging_config ||= self.request_logging_config.clone
106
- response_logging_config ||= self.response_logging_config.clone
107
-
108
- LoggingConfiguration.new(logger: logger, log_level: log_level,
109
- mask_sensitive_headers: mask_sensitive_headers,
110
- request_logging_config: request_logging_config,
111
- response_logging_config: response_logging_config)
112
- end
113
- end
114
- end
6
+ module PaypalServerSdk
7
+ # Initializes a new instance of RequestLoggingConfiguration.
8
+ class RequestLoggingConfiguration < CoreLibrary::ApiRequestLoggingConfiguration
9
+ # @param log_body [Boolean] Indicates whether the message body should be logged. Default is false.
10
+ # @param log_headers [Boolean] Indicates whether the message headers should be logged. Default is false.
11
+ # @param headers_to_exclude [Array<String>] Array of headers not displayed in logging. Default is an empty array.
12
+ # @param headers_to_include [Array<String>] Array of headers to be displayed in logging. Default is an empty array.
13
+ # @param headers_to_unmask [Array<String>] Array of headers which values are non-sensitive to display in logging.
14
+ # Default is an empty array.
15
+ def initialize(log_body: false, log_headers: false, headers_to_include: nil,
16
+ headers_to_exclude: nil, headers_to_unmask: nil,
17
+ include_query_in_path: false)
18
+ super(
19
+ log_body,
20
+ log_headers,
21
+ headers_to_exclude,
22
+ headers_to_include,
23
+ headers_to_unmask,
24
+ include_query_in_path
25
+ )
26
+ end
27
+
28
+ def clone_with(log_body: nil, log_headers: nil, headers_to_include: nil,
29
+ headers_to_exclude: nil, headers_to_unmask: nil, include_query_in_path: nil)
30
+ log_body ||= self.log_body
31
+ log_headers ||= self.log_headers
32
+ headers_to_include ||= self.headers_to_include
33
+ headers_to_exclude ||= self.headers_to_exclude
34
+ headers_to_unmask ||= self.headers_to_unmask
35
+ include_query_in_path ||= self.include_query_in_path
36
+
37
+ RequestLoggingConfiguration.new(
38
+ log_body: log_body,
39
+ log_headers: log_headers,
40
+ headers_to_include: headers_to_include,
41
+ headers_to_exclude: headers_to_exclude,
42
+ headers_to_unmask: headers_to_unmask,
43
+ include_query_in_path: include_query_in_path
44
+ )
45
+ end
46
+
47
+ def self.from_env
48
+ log_body = ENV['REQUEST_LOG_BODY']
49
+ log_headers = ENV['REQUEST_LOG_HEADERS']
50
+ headers_to_include = ENV['REQUEST_HEADERS_TO_INCLUDE']
51
+ headers_to_exclude = ENV['REQUEST_HEADERS_TO_EXCLUDE']
52
+ headers_to_unmask = ENV['REQUEST_HEADERS_TO_UNMASK']
53
+ include_query_in_path = ENV['REQUEST_INCLUDE_QUERY_IN_PATH']
54
+
55
+ new(
56
+ log_body: log_body,
57
+ log_headers: log_headers,
58
+ headers_to_include: headers_to_include,
59
+ headers_to_exclude: headers_to_exclude,
60
+ headers_to_unmask: headers_to_unmask,
61
+ include_query_in_path: include_query_in_path
62
+ )
63
+ end
64
+
65
+ def self.any_logging_configured?
66
+ %w[
67
+ REQUEST_LOG_BODY
68
+ REQUEST_LOG_HEADERS
69
+ REQUEST_HEADERS_TO_INCLUDE
70
+ REQUEST_HEADERS_TO_EXCLUDE
71
+ REQUEST_HEADERS_TO_UNMASK
72
+ REQUEST_INCLUDE_QUERY_IN_PATH
73
+ ].any? { |key| ENV.key?(key) && !ENV[key].nil? && !ENV[key].empty? }
74
+ end
75
+ end
76
+
77
+ # Initializes a new instance of ResponseLoggingConfiguration.
78
+ class ResponseLoggingConfiguration < CoreLibrary::ApiResponseLoggingConfiguration
79
+ def initialize(log_body: false, log_headers: false, headers_to_include: nil,
80
+ headers_to_exclude: nil, headers_to_unmask: nil)
81
+ super(
82
+ log_body,
83
+ log_headers,
84
+ headers_to_exclude,
85
+ headers_to_include,
86
+ headers_to_unmask
87
+ )
88
+ end
89
+
90
+ def clone_with(log_body: nil, log_headers: nil, headers_to_include: nil,
91
+ headers_to_exclude: nil, headers_to_unmask: nil)
92
+ log_body ||= self.log_body
93
+ log_headers ||= self.log_headers
94
+ headers_to_include ||= self.headers_to_include
95
+ headers_to_exclude ||= self.headers_to_exclude
96
+ headers_to_unmask ||= self.headers_to_unmask
97
+
98
+ ResponseLoggingConfiguration.new(
99
+ log_body: log_body,
100
+ log_headers: log_headers,
101
+ headers_to_include: headers_to_include,
102
+ headers_to_exclude: headers_to_exclude,
103
+ headers_to_unmask: headers_to_unmask
104
+ )
105
+ end
106
+
107
+ def self.from_env
108
+ log_body = ENV['RESPONSE_LOG_BODY']
109
+ log_headers = ENV['RESPONSE_LOG_HEADERS']
110
+ headers_to_include = ENV['RESPONSE_HEADERS_TO_INCLUDE']
111
+ headers_to_exclude = ENV['RESPONSE_HEADERS_TO_EXCLUDE']
112
+ headers_to_unmask = ENV['RESPONSE_HEADERS_TO_UNMASK']
113
+
114
+ new(
115
+ log_body: log_body,
116
+ log_headers: log_headers,
117
+ headers_to_include: headers_to_include,
118
+ headers_to_exclude: headers_to_exclude,
119
+ headers_to_unmask: headers_to_unmask
120
+ )
121
+ end
122
+
123
+ def self.any_logging_configured?
124
+ %w[
125
+ RESPONSE_LOG_BODY
126
+ RESPONSE_LOG_HEADERS
127
+ RESPONSE_HEADERS_TO_INCLUDE
128
+ RESPONSE_HEADERS_TO_EXCLUDE
129
+ RESPONSE_HEADERS_TO_UNMASK
130
+ ].any? { |key| ENV.key?(key) && !ENV[key].nil? && !ENV[key].empty? }
131
+ end
132
+ end
133
+
134
+ # Initializes a new instance of LoggingConfiguration.
135
+ class LoggingConfiguration < CoreLibrary::ApiLoggingConfiguration
136
+ def initialize(logger: nil, log_level: nil, mask_sensitive_headers: true,
137
+ request_logging_config: nil,
138
+ response_logging_config: nil)
139
+ request_logging_config ||= RequestLoggingConfiguration.new
140
+ response_logging_config ||= ResponseLoggingConfiguration.new
141
+ super(
142
+ logger,
143
+ log_level,
144
+ request_logging_config,
145
+ response_logging_config,
146
+ mask_sensitive_headers
147
+ )
148
+ end
149
+
150
+ def clone_with(logger: nil, log_level: nil, mask_sensitive_headers: nil,
151
+ request_logging_config: nil, response_logging_config: nil)
152
+ logger ||= self.logger
153
+ log_level ||= self.log_level
154
+ mask_sensitive_headers ||= self.mask_sensitive_headers
155
+ request_logging_config ||= self.request_logging_config.clone
156
+ response_logging_config ||= self.response_logging_config.clone
157
+
158
+ LoggingConfiguration.new(
159
+ logger: logger,
160
+ log_level: log_level,
161
+ mask_sensitive_headers: mask_sensitive_headers,
162
+ request_logging_config: request_logging_config,
163
+ response_logging_config: response_logging_config
164
+ )
165
+ end
166
+
167
+ def self.from_env
168
+ log_level = ENV['LOG_LEVEL']
169
+ mask_sensitive_headers = ENV['MASK_SENSITIVE_HEADERS']
170
+
171
+ new(
172
+ log_level: log_level,
173
+ mask_sensitive_headers: mask_sensitive_headers,
174
+ request_logging_config: RequestLoggingConfiguration.from_env,
175
+ response_logging_config: ResponseLoggingConfiguration.from_env
176
+ )
177
+ end
178
+
179
+ def self.any_logging_configured?
180
+ RequestLoggingConfiguration.any_logging_configured? ||
181
+ ResponseLoggingConfiguration.any_logging_configured? ||
182
+ ENV.key?('LOG_LEVEL') ||
183
+ ENV.key?('MASK_SENSITIVE_HEADERS')
184
+ end
185
+ end
186
+ end
@@ -24,5 +24,18 @@ module PaypalServerSdk
24
24
 
25
25
  true
26
26
  end
27
+
28
+ def self.from_value(value, default_value = ENUM_3DSECURE)
29
+ return default_value if value.nil?
30
+
31
+ str = value.to_s.strip
32
+
33
+ case str.downcase
34
+ when 'enum_3dsecure' then ENUM_3DSECURE
35
+ when 'emv' then EMV
36
+ else
37
+ default_value
38
+ end
39
+ end
27
40
  end
28
41
  end