moneykit 0.0.3 → 0.0.5
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/README.md +2 -2
- data/lib/moneykit/api/access_token_api.rb +9 -9
- data/lib/moneykit/api/account_numbers_api.rb +6 -6
- data/lib/moneykit/api/accounts_api.rb +15 -15
- data/lib/moneykit/api/identity_api.rb +6 -6
- data/lib/moneykit/api/institutions_api.rb +7 -7
- data/lib/moneykit/api/link_session_api.rb +7 -7
- data/lib/moneykit/api/links_api.rb +76 -13
- data/lib/moneykit/api/products_api.rb +6 -6
- data/lib/moneykit/api/transactions_api.rb +28 -28
- data/lib/moneykit/api/users_api.rb +14 -14
- data/lib/moneykit/api/webhooks_api.rb +97 -0
- data/lib/moneykit/api_client.rb +40 -36
- data/lib/moneykit/api_error.rb +1 -1
- data/lib/moneykit/configuration.rb +20 -30
- data/lib/moneykit/models/account.rb +27 -54
- data/lib/moneykit/models/account_balances.rb +18 -27
- data/lib/moneykit/models/account_group.rb +23 -26
- data/lib/moneykit/models/account_identity.rb +34 -59
- data/lib/moneykit/models/account_numbers.rb +75 -51
- data/lib/moneykit/models/account_numbers_link_product.rb +18 -28
- data/lib/moneykit/models/account_numbers_product_settings.rb +16 -21
- data/lib/moneykit/models/account_with_account_numbers.rb +29 -56
- data/lib/moneykit/models/accounts_link_product.rb +17 -25
- data/lib/moneykit/models/ach_number.rb +19 -26
- data/lib/moneykit/models/address.rb +17 -28
- data/lib/moneykit/models/api_error_auth_expired_access_token_response.rb +17 -24
- data/lib/moneykit/models/api_error_auth_unauthorized_response.rb +18 -25
- data/lib/moneykit/models/api_error_rate_limit_exceeded_response.rb +17 -24
- data/lib/moneykit/models/bacs_number.rb +18 -25
- data/lib/moneykit/models/basic_account_details.rb +20 -29
- data/lib/moneykit/models/country.rb +1 -1
- data/lib/moneykit/models/create_link_session_request.rb +48 -45
- data/lib/moneykit/models/create_link_session_response.rb +17 -24
- data/lib/moneykit/models/currency.rb +1 -1
- data/lib/moneykit/models/cursor_pagination.rb +17 -24
- data/lib/moneykit/models/customer_app.rb +18 -25
- data/lib/moneykit/models/eft_number.rb +19 -26
- data/lib/moneykit/models/email.rb +17 -22
- data/lib/moneykit/models/exchange_token_request.rb +17 -24
- data/lib/moneykit/models/exchange_token_response.rb +19 -26
- data/lib/moneykit/models/generate_access_token_response.rb +19 -26
- data/lib/moneykit/models/get_account_numbers_response.rb +23 -26
- data/lib/moneykit/models/get_account_response.rb +19 -26
- data/lib/moneykit/models/get_accounts_response.rb +25 -31
- data/lib/moneykit/models/get_institutions_response.rb +25 -31
- data/lib/moneykit/models/get_transactions_response.rb +34 -39
- data/lib/moneykit/models/get_user_accounts_response.rb +24 -32
- data/lib/moneykit/models/get_user_links_response.rb +24 -32
- data/lib/moneykit/models/get_user_transactions_response.rb +32 -34
- data/lib/moneykit/models/http_validation_error.rb +24 -28
- data/lib/moneykit/models/identity_link_product.rb +18 -28
- data/lib/moneykit/models/identity_product_settings.rb +16 -21
- data/lib/moneykit/models/identity_response.rb +24 -30
- data/lib/moneykit/models/institution.rb +29 -38
- data/lib/moneykit/models/institution_error_not_found_response.rb +17 -24
- data/lib/moneykit/models/international_number.rb +18 -25
- data/lib/moneykit/models/introspect_client_response.rb +22 -29
- data/lib/moneykit/models/jwk_set.rb +23 -26
- data/lib/moneykit/models/link_common.rb +25 -39
- data/lib/moneykit/models/link_error_bad_config_response.rb +269 -0
- data/lib/moneykit/models/link_error_bad_state_response.rb +19 -28
- data/lib/moneykit/models/link_error_deleted_response.rb +17 -24
- data/lib/moneykit/models/link_error_forbidden_action_response.rb +18 -25
- data/lib/moneykit/models/link_error_not_found_response.rb +17 -24
- data/lib/moneykit/models/link_error_unauthorized_access_response.rb +17 -24
- data/lib/moneykit/models/link_permission_scope.rb +1 -1
- data/lib/moneykit/models/link_permissions.rb +23 -33
- data/lib/moneykit/models/link_products.rb +16 -21
- data/lib/moneykit/models/link_response.rb +26 -39
- data/lib/moneykit/models/link_session_customer_user.rb +20 -28
- data/lib/moneykit/models/link_session_customer_user_email.rb +18 -25
- data/lib/moneykit/models/link_session_customer_user_phone.rb +18 -26
- data/lib/moneykit/models/link_session_error_forbidden_config_response.rb +18 -25
- data/lib/moneykit/models/link_session_error_invalid_token_exchange.rb +18 -25
- data/lib/moneykit/models/link_session_setting_overrides.rb +19 -43
- data/lib/moneykit/models/link_state.rb +1 -1
- data/lib/moneykit/models/link_state_changed_webhook.rb +28 -31
- data/lib/moneykit/models/money_link_features.rb +27 -32
- data/lib/moneykit/models/owner.rb +42 -42
- data/lib/moneykit/models/phone_number.rb +18 -25
- data/lib/moneykit/models/phone_number_type.rb +1 -1
- data/lib/moneykit/models/product.rb +1 -1
- data/lib/moneykit/models/products_settings.rb +19 -24
- data/lib/moneykit/models/provider.rb +4 -2
- data/lib/moneykit/models/public_link_error.rb +43 -0
- data/lib/moneykit/models/refresh_products_request.rb +23 -34
- data/lib/moneykit/models/requested_link_permission.rb +19 -26
- data/lib/moneykit/models/response401_disconnect_links_id_delete.rb +75 -269
- data/lib/moneykit/models/response401_exchange_token_link_session_exchange_token_post.rb +74 -267
- data/lib/moneykit/models/response401_get_account_links_id_accounts_account_id_get.rb +75 -269
- data/lib/moneykit/models/response401_get_account_numbers_links_id_accounts_numbers_get.rb +75 -269
- data/lib/moneykit/models/response401_get_accounts_links_id_accounts_get.rb +75 -269
- data/lib/moneykit/models/response401_get_identities_links_id_identity_get.rb +75 -269
- data/lib/moneykit/models/response401_get_institution_institutions_institution_id_get.rb +74 -267
- data/lib/moneykit/models/response401_get_institutions_institutions_get.rb +74 -267
- data/lib/moneykit/models/response401_get_link_links_id_get.rb +75 -269
- data/lib/moneykit/models/response401_get_transactions_diff_links_id_transactions_sync_get.rb +75 -269
- data/lib/moneykit/models/response401_get_transactions_links_id_transactions_get.rb +75 -269
- data/lib/moneykit/models/response401_get_user_accounts_users_id_accounts_get.rb +74 -267
- data/lib/moneykit/models/response401_get_user_links_users_id_links_get.rb +74 -267
- data/lib/moneykit/models/response401_get_user_transactions_users_id_transactions_get.rb +74 -267
- data/lib/moneykit/models/response401_get_well_known_jwks_well_known_jwks_json_get.rb +74 -267
- data/lib/moneykit/models/response401_instrospect_client_auth_introspect_get.rb +74 -267
- data/lib/moneykit/models/response401_refresh_products_links_id_products_post.rb +75 -269
- data/lib/moneykit/models/response401_reset_login_links_id_reset_post.rb +102 -0
- data/lib/moneykit/models/response401_trigger_test_link_webhook_event_webhooks_test_link_id_post.rb +102 -0
- data/lib/moneykit/models/response401_update_link_links_id_patch.rb +75 -269
- data/lib/moneykit/models/transaction.rb +35 -35
- data/lib/moneykit/models/transaction_diff.rb +36 -37
- data/lib/moneykit/models/transaction_sync_response.rb +23 -30
- data/lib/moneykit/models/transaction_type.rb +1 -1
- data/lib/moneykit/models/transaction_type_filter.rb +1 -1
- data/lib/moneykit/models/transactions_link_product.rb +18 -28
- data/lib/moneykit/models/transactions_product_settings.rb +16 -21
- data/lib/moneykit/models/update_link_request.rb +21 -28
- data/lib/moneykit/models/validation_error.rb +25 -28
- data/lib/moneykit/models/validation_error_location_inner.rb +101 -0
- data/lib/moneykit/models/webhook_link_test_event.rb +40 -0
- data/lib/moneykit/models/webhook_test_link_request.rb +252 -0
- data/lib/moneykit/models/webhook_test_link_response.rb +220 -0
- data/lib/moneykit/version.rb +2 -2
- data/lib/moneykit.rb +10 -29
- data/lib/plaid_compatible/money_kit_plaid_compatible/api/plaid_api.rb +684 -679
- data/lib/plaid_compatible/money_kit_plaid_compatible/api_client.rb +330 -330
- data/lib/plaid_compatible/money_kit_plaid_compatible/api_error.rb +33 -33
- data/lib/plaid_compatible/money_kit_plaid_compatible/configuration.rb +245 -245
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_balance.rb +198 -198
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_base.rb +213 -213
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_identity.rb +223 -223
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_subtype.rb +89 -89
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_type.rb +22 -22
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/accounts_get_request.rb +198 -198
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/accounts_get_request_options.rb +175 -175
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/accounts_get_response.rb +194 -194
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/address.rb +183 -183
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/address_data.rb +209 -209
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_numbers.rb +211 -209
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_request.rb +198 -198
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_request_options.rb +175 -175
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_response.rb +200 -200
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/country_code.rb +19 -19
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/email.rb +184 -184
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/http_validation_error.rb +171 -171
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/identity_get_request.rb +198 -198
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/identity_get_request_options.rb +175 -175
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/identity_get_response.rb +194 -194
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/institution.rb +216 -214
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/institutions_get_by_id_request.rb +202 -202
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/institutions_get_by_id_response.rb +183 -183
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item.rb +246 -245
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_error_webhook.rb +208 -208
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_get_request.rb +192 -192
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_get_response.rb +189 -189
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_public_token_exchange_request.rb +192 -192
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_public_token_exchange_response.rb +193 -193
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_remove_request.rb +192 -192
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_remove_response.rb +175 -175
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_investments.rb +182 -182
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_last_webhook.rb +182 -182
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_nullable.rb +183 -183
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_transactions.rb +182 -182
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/link_token_create_request.rb +268 -266
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/link_token_create_request_user.rb +212 -212
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/link_token_create_response.rb +193 -193
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_ach.rb +202 -202
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_bacs.rb +193 -193
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_eft.rb +202 -202
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_international.rb +193 -193
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/owner.rb +211 -209
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/personal_finance_category.rb +184 -184
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/phone_number.rb +193 -193
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/plaid_error.rb +247 -245
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/plaid_error_type.rb +30 -30
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/products.rb +20 -20
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/removed_transaction.rb +174 -174
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transaction.rb +283 -283
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_get_request.rb +217 -217
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_get_request_options.rb +211 -211
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_get_response.rb +217 -217
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_refresh_request.rb +192 -192
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_refresh_response.rb +175 -175
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_sync_request.rb +215 -215
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_sync_request_options.rb +184 -184
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_sync_response.rb +228 -228
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/validation_error.rb +187 -187
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/webhook_environment_values.rb +19 -19
- data/lib/plaid_compatible/money_kit_plaid_compatible/version.rb +1 -1
- data/lib/plaid_compatible/money_kit_plaid_compatible.rb +13 -13
- data/moneykit.gemspec +2 -1
- metadata +14 -5
| @@ -10,48 +10,48 @@ | |
| 10 10 |  | 
| 11 11 | 
             
            module MoneyKit
         | 
| 12 12 | 
             
              module PlaidCompatible
         | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 13 | 
            +
                class ApiError < StandardError
         | 
| 14 | 
            +
                  attr_reader :code, :response_headers, :response_body, :data
         | 
| 15 15 |  | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 16 | 
            +
                  # Usage examples:
         | 
| 17 | 
            +
                  #   ApiError.new
         | 
| 18 | 
            +
                  #   ApiError.new("message")
         | 
| 19 | 
            +
                  #   ApiError.new(:code => 500, :response_headers => {}, :response_body => "")
         | 
| 20 | 
            +
                  #   ApiError.new(:code => 404, :message => "Not Found")
         | 
| 21 | 
            +
                  def initialize(arg = nil)
         | 
| 22 | 
            +
                    if arg.is_a? Hash
         | 
| 23 | 
            +
                      if arg.key?(:message) || arg.key?('message')
         | 
| 24 | 
            +
                        super(arg[:message] || arg['message'])
         | 
| 25 | 
            +
                      else
         | 
| 26 | 
            +
                        super arg
         | 
| 27 | 
            +
                      end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                      arg.each do |k, v|
         | 
| 30 | 
            +
                        instance_variable_set "@#{k}", v
         | 
| 31 | 
            +
                      end
         | 
| 25 32 | 
             
                    else
         | 
| 26 33 | 
             
                      super arg
         | 
| 27 34 | 
             
                    end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                    arg.each do |k, v|
         | 
| 30 | 
            -
                      instance_variable_set "@#{k}", v
         | 
| 31 | 
            -
                    end
         | 
| 32 | 
            -
                  else
         | 
| 33 | 
            -
                    super arg
         | 
| 34 35 | 
             
                  end
         | 
| 35 | 
            -
                end
         | 
| 36 36 |  | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 37 | 
            +
                  # Override to_s to display a friendly error message
         | 
| 38 | 
            +
                  def to_s
         | 
| 39 | 
            +
                    message
         | 
| 40 | 
            +
                  end
         | 
| 41 41 |  | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 42 | 
            +
                  def message
         | 
| 43 | 
            +
                    msg = if @message.nil?
         | 
| 44 | 
            +
                            'Error message: the server returns an error'
         | 
| 45 | 
            +
                          else
         | 
| 46 | 
            +
                            @message
         | 
| 47 | 
            +
                          end
         | 
| 48 48 |  | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 49 | 
            +
                    msg += "\nHTTP status code: #{code}" if code
         | 
| 50 | 
            +
                    msg += "\nResponse headers: #{response_headers}" if response_headers
         | 
| 51 | 
            +
                    msg += "\nResponse body: #{response_body}" if response_body
         | 
| 52 52 |  | 
| 53 | 
            -
             | 
| 53 | 
            +
                    msg
         | 
| 54 | 
            +
                  end
         | 
| 54 55 | 
             
                end
         | 
| 55 56 | 
             
              end
         | 
| 56 | 
            -
              end
         | 
| 57 57 | 
             
            end
         | 
| @@ -10,276 +10,276 @@ | |
| 10 10 |  | 
| 11 11 | 
             
            module MoneyKit
         | 
| 12 12 | 
             
              module PlaidCompatible
         | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 13 | 
            +
                class Configuration
         | 
| 14 | 
            +
                  # Plaid Environment mapping
         | 
| 15 | 
            +
                  # production, development, sandbox
         | 
| 16 | 
            +
                  Environment = { 'production' => 0, 'sandbox' => 1 }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  # Defines url scheme
         | 
| 19 | 
            +
                  attr_accessor :scheme
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  # Defines url host
         | 
| 22 | 
            +
                  attr_accessor :host
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  # Defines url base path
         | 
| 25 | 
            +
                  attr_accessor :base_path
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  # Define server configuration index
         | 
| 28 | 
            +
                  attr_accessor :server_index
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  # Define server operation configuration index
         | 
| 31 | 
            +
                  attr_accessor :server_operation_index
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  # Default server variables
         | 
| 34 | 
            +
                  attr_accessor :server_variables
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  # Default server operation variables
         | 
| 37 | 
            +
                  attr_accessor :server_operation_variables
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  # Defines API keys used with API Key authentications.
         | 
| 40 | 
            +
                  #
         | 
| 41 | 
            +
                  # @return [Hash] key: parameter name, value: parameter value (API key)
         | 
| 42 | 
            +
                  #
         | 
| 43 | 
            +
                  # @example parameter name is "api_key", API key is "xxx" (e.g. "api_key=xxx" in query string)
         | 
| 44 | 
            +
                  #   config.api_key['api_key'] = 'xxx'
         | 
| 45 | 
            +
                  attr_accessor :api_key
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  # Defines API key prefixes used with API Key authentications.
         | 
| 48 | 
            +
                  #
         | 
| 49 | 
            +
                  # @return [Hash] key: parameter name, value: API key prefix
         | 
| 50 | 
            +
                  #
         | 
| 51 | 
            +
                  # @example parameter name is "Authorization", API key prefix is "Token" (e.g. "Authorization: Token xxx" in headers)
         | 
| 52 | 
            +
                  #   config.api_key_prefix['api_key'] = 'Token'
         | 
| 53 | 
            +
                  attr_accessor :api_key_prefix
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  # Defines the username used with HTTP basic authentication.
         | 
| 56 | 
            +
                  #
         | 
| 57 | 
            +
                  # @return [String]
         | 
| 58 | 
            +
                  attr_accessor :username
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  # Defines the password used with HTTP basic authentication.
         | 
| 61 | 
            +
                  #
         | 
| 62 | 
            +
                  # @return [String]
         | 
| 63 | 
            +
                  attr_accessor :password
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  # Defines the access token (Bearer) used with OAuth2.
         | 
| 66 | 
            +
                  attr_accessor :access_token
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  # Set this to enable/disable debugging. When enabled (set to true), HTTP request/response
         | 
| 69 | 
            +
                  # details will be logged with `logger.debug` (see the `logger` attribute).
         | 
| 70 | 
            +
                  # Default to false.
         | 
| 71 | 
            +
                  #
         | 
| 72 | 
            +
                  # @return [true, false]
         | 
| 73 | 
            +
                  attr_accessor :debugging
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  # Defines the logger used for debugging.
         | 
| 76 | 
            +
                  # Default to `Rails.logger` (when in Rails) or logging to STDOUT.
         | 
| 77 | 
            +
                  #
         | 
| 78 | 
            +
                  # @return [#debug]
         | 
| 79 | 
            +
                  attr_accessor :logger
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  # Defines the temporary folder to store downloaded files
         | 
| 82 | 
            +
                  # (for API endpoints that have file response).
         | 
| 83 | 
            +
                  # Default to use `Tempfile`.
         | 
| 84 | 
            +
                  #
         | 
| 85 | 
            +
                  # @return [String]
         | 
| 86 | 
            +
                  attr_accessor :temp_folder_path
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  # The time limit for HTTP request in seconds.
         | 
| 89 | 
            +
                  attr_accessor :timeout
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                  # Set this to false to skip client side validation in the operation.
         | 
| 92 | 
            +
                  # Default to true.
         | 
| 93 | 
            +
                  # @return [true, false]
         | 
| 94 | 
            +
                  attr_accessor :client_side_validation
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                  ### TLS/SSL setting
         | 
| 97 | 
            +
                  # Set this to false to skip verifying SSL certificate when calling API from https server.
         | 
| 98 | 
            +
                  # Default to true.
         | 
| 99 | 
            +
                  #
         | 
| 100 | 
            +
                  # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.
         | 
| 101 | 
            +
                  #
         | 
| 102 | 
            +
                  # @return [true, false]
         | 
| 103 | 
            +
                  attr_accessor :ssl_verify
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  ### TLS/SSL setting
         | 
| 106 | 
            +
                  # Any `OpenSSL::SSL::` constant (see https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/SSL.html)
         | 
| 107 | 
            +
                  #
         | 
| 108 | 
            +
                  # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.
         | 
| 109 | 
            +
                  #
         | 
| 110 | 
            +
                  attr_accessor :ssl_verify_mode
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  ### TLS/SSL setting
         | 
| 113 | 
            +
                  # Set this to customize the certificate file to verify the peer.
         | 
| 114 | 
            +
                  #
         | 
| 115 | 
            +
                  # @return [String] the path to the certificate file
         | 
| 116 | 
            +
                  attr_accessor :ssl_ca_file
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                  ### TLS/SSL setting
         | 
| 119 | 
            +
                  # Client certificate file (for client certificate)
         | 
| 120 | 
            +
                  attr_accessor :ssl_client_cert
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                  ### TLS/SSL setting
         | 
| 123 | 
            +
                  # Client private key file (for client certificate)
         | 
| 124 | 
            +
                  attr_accessor :ssl_client_key
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                  # Set this to customize parameters encoding of array parameter with multi collectionFormat.
         | 
| 127 | 
            +
                  # Default to nil.
         | 
| 128 | 
            +
                  #
         | 
| 129 | 
            +
                  # @see The params_encoding option of Ethon. Related source code:
         | 
| 130 | 
            +
                  # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96
         | 
| 131 | 
            +
                  attr_accessor :params_encoding
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                  attr_accessor :inject_format, :force_ending_format
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                  def initialize
         | 
| 136 | 
            +
                    @scheme = 'https'
         | 
| 137 | 
            +
                    @host = 'production.moneykit.com'
         | 
| 138 | 
            +
                    @base_path = '/plaid-compatible'
         | 
| 139 | 
            +
                    @server_index = 0
         | 
| 140 | 
            +
                    @server_operation_index = {}
         | 
| 141 | 
            +
                    @server_variables = {}
         | 
| 142 | 
            +
                    @server_operation_variables = {}
         | 
| 143 | 
            +
                    @api_key = {
         | 
| 144 | 
            +
                      'Plaid-Version' => ''
         | 
| 145 | 
            +
                    }
         | 
| 146 | 
            +
                    @api_key_prefix = {}
         | 
| 147 | 
            +
                    @timeout = 60
         | 
| 148 | 
            +
                    @client_side_validation = true
         | 
| 149 | 
            +
                    @ssl_verify = true
         | 
| 150 | 
            +
                    @ssl_verify_mode = nil
         | 
| 151 | 
            +
                    @ssl_ca_file = nil
         | 
| 152 | 
            +
                    @ssl_client_cert = nil
         | 
| 153 | 
            +
                    @ssl_client_key = nil
         | 
| 154 | 
            +
                    @debugging = false
         | 
| 155 | 
            +
                    @inject_format = false
         | 
| 156 | 
            +
                    @force_ending_format = false
         | 
| 157 | 
            +
                    @logger = defined?(Rails) && Rails.respond_to?(:logger) ? Rails.logger : Logger.new(STDOUT)
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                    yield(self) if block_given?
         | 
| 160 | 
            +
                  end
         | 
| 161 161 |  | 
| 162 | 
            -
             | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 162 | 
            +
                  # The default Configuration object.
         | 
| 163 | 
            +
                  def self.default
         | 
| 164 | 
            +
                    @@default ||= Configuration.new
         | 
| 165 | 
            +
                  end
         | 
| 166 166 |  | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 167 | 
            +
                  def configure
         | 
| 168 | 
            +
                    yield(self) if block_given?
         | 
| 169 | 
            +
                  end
         | 
| 170 170 |  | 
| 171 | 
            -
             | 
| 172 | 
            -
             | 
| 173 | 
            -
             | 
| 174 | 
            -
             | 
| 171 | 
            +
                  def scheme=(scheme)
         | 
| 172 | 
            +
                    # remove :// from scheme
         | 
| 173 | 
            +
                    @scheme = scheme.sub(%r{://}, '')
         | 
| 174 | 
            +
                  end
         | 
| 175 175 |  | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 176 | 
            +
                  def host=(host)
         | 
| 177 | 
            +
                    # remove http(s):// and anything after a slash
         | 
| 178 | 
            +
                    @host = host.sub(%r{https?://}, '').split('/').first
         | 
| 179 | 
            +
                  end
         | 
| 180 180 |  | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 183 | 
            -
             | 
| 184 | 
            -
             | 
| 185 | 
            -
             | 
| 181 | 
            +
                  def base_path=(base_path)
         | 
| 182 | 
            +
                    # Add leading and trailing slashes to base_path
         | 
| 183 | 
            +
                    @base_path = "/#{base_path}".gsub(%r{/+}, '/')
         | 
| 184 | 
            +
                    @base_path = '' if @base_path == '/'
         | 
| 185 | 
            +
                  end
         | 
| 186 186 |  | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 187 | 
            +
                  # Returns base URL for specified operation based on server settings
         | 
| 188 | 
            +
                  def base_url(operation = nil)
         | 
| 189 | 
            +
                    index = server_operation_index.fetch(operation, server_index)
         | 
| 190 | 
            +
                    return "#{scheme}://#{[host, base_path].join('/').gsub(%r{/+}, '/')}".sub(%r{/+\z}, '') if index.nil?
         | 
| 191 191 |  | 
| 192 | 
            -
             | 
| 193 | 
            -
             | 
| 194 | 
            -
             | 
| 192 | 
            +
                    server_url(index, server_operation_variables.fetch(operation, server_variables),
         | 
| 193 | 
            +
                               operation_server_settings[operation])
         | 
| 194 | 
            +
                  end
         | 
| 195 195 |  | 
| 196 | 
            -
             | 
| 197 | 
            -
             | 
| 198 | 
            -
             | 
| 199 | 
            -
             | 
| 200 | 
            -
             | 
| 201 | 
            -
             | 
| 202 | 
            -
             | 
| 196 | 
            +
                  # Gets API key (with prefix if set).
         | 
| 197 | 
            +
                  # @param [String] param_name the parameter name of API key auth
         | 
| 198 | 
            +
                  def api_key_with_prefix(param_name)
         | 
| 199 | 
            +
                    if @api_key_prefix[param_name]
         | 
| 200 | 
            +
                      "#{@api_key_prefix[param_name]} #{@api_key[param_name]}"
         | 
| 201 | 
            +
                    else
         | 
| 202 | 
            +
                      @api_key[param_name]
         | 
| 203 | 
            +
                    end
         | 
| 203 204 | 
             
                  end
         | 
| 204 | 
            -
                end
         | 
| 205 205 |  | 
| 206 | 
            -
             | 
| 207 | 
            -
             | 
| 208 | 
            -
             | 
| 209 | 
            -
             | 
| 206 | 
            +
                  # Gets Basic Auth token string
         | 
| 207 | 
            +
                  def basic_auth_token
         | 
| 208 | 
            +
                    'Basic ' + ["#{username}:#{password}"].pack('m').delete("\r\n")
         | 
| 209 | 
            +
                  end
         | 
| 210 210 |  | 
| 211 | 
            -
             | 
| 212 | 
            -
             | 
| 213 | 
            -
             | 
| 214 | 
            -
             | 
| 211 | 
            +
                  # Returns Auth Settings hash for api client.
         | 
| 212 | 
            +
                  def auth_settings
         | 
| 213 | 
            +
                    {
         | 
| 214 | 
            +
                      'clientId' =>
         | 
| 215 | 
            +
                        {
         | 
| 216 | 
            +
                          type: 'api_key',
         | 
| 217 | 
            +
                          in: 'header',
         | 
| 218 | 
            +
                          key: 'PLAID-CLIENT-ID',
         | 
| 219 | 
            +
                          value: api_key_with_prefix('PLAID-CLIENT-ID')
         | 
| 220 | 
            +
                        },
         | 
| 221 | 
            +
                      'secret' =>
         | 
| 222 | 
            +
                        {
         | 
| 223 | 
            +
                          type: 'api_key',
         | 
| 224 | 
            +
                          in: 'header',
         | 
| 225 | 
            +
                          key: 'PLAID-SECRET',
         | 
| 226 | 
            +
                          value: api_key_with_prefix('PLAID-SECRET')
         | 
| 227 | 
            +
                        }
         | 
| 228 | 
            +
                    }
         | 
| 229 | 
            +
                  end
         | 
| 230 | 
            +
             | 
| 231 | 
            +
                  # Returns an array of Server setting
         | 
| 232 | 
            +
                  def server_settings
         | 
| 233 | 
            +
                    [
         | 
| 215 234 | 
             
                      {
         | 
| 216 | 
            -
                         | 
| 217 | 
            -
                         | 
| 218 | 
            -
                        key: 'PLAID-CLIENT-ID',
         | 
| 219 | 
            -
                        value: api_key_with_prefix('PLAID-CLIENT-ID')
         | 
| 235 | 
            +
                        url: 'https://production.moneykit.com/plaid-compatible',
         | 
| 236 | 
            +
                        description: 'MoneyKit production environment (Live institution data)'
         | 
| 220 237 | 
             
                      },
         | 
| 221 | 
            -
                    'secret' =>
         | 
| 222 238 | 
             
                      {
         | 
| 223 | 
            -
                         | 
| 224 | 
            -
                         | 
| 225 | 
            -
                        key: 'PLAID-SECRET',
         | 
| 226 | 
            -
                        value: api_key_with_prefix('PLAID-SECRET')
         | 
| 239 | 
            +
                        url: 'https://sandbox.moneykit.com/plaid-compatible',
         | 
| 240 | 
            +
                        description: 'MoneyKit sandbox environment (Unrestricted environment with fake institution data)'
         | 
| 227 241 | 
             
                      }
         | 
| 228 | 
            -
             | 
| 229 | 
            -
             | 
| 230 | 
            -
             | 
| 231 | 
            -
                # Returns an array of Server setting
         | 
| 232 | 
            -
                def server_settings
         | 
| 233 | 
            -
                  [
         | 
| 234 | 
            -
                    {
         | 
| 235 | 
            -
                      url: 'https://production.moneykit.com/plaid-compatible',
         | 
| 236 | 
            -
                      description: 'MoneyKit production environment (Live institution data)'
         | 
| 237 | 
            -
                    },
         | 
| 238 | 
            -
                    {
         | 
| 239 | 
            -
                      url: 'https://sandbox.moneykit.com/plaid-compatible',
         | 
| 240 | 
            -
                      description: 'MoneyKit sandbox environment (Unrestricted environment with fake institution data)'
         | 
| 241 | 
            -
                    }
         | 
| 242 | 
            -
                  ]
         | 
| 243 | 
            -
                end
         | 
| 242 | 
            +
                    ]
         | 
| 243 | 
            +
                  end
         | 
| 244 244 |  | 
| 245 | 
            -
             | 
| 246 | 
            -
             | 
| 247 | 
            -
             | 
| 245 | 
            +
                  def operation_server_settings
         | 
| 246 | 
            +
                    {}
         | 
| 247 | 
            +
                  end
         | 
| 248 248 |  | 
| 249 | 
            -
             | 
| 250 | 
            -
             | 
| 251 | 
            -
             | 
| 252 | 
            -
             | 
| 253 | 
            -
             | 
| 254 | 
            -
             | 
| 249 | 
            +
                  # Returns URL based on server settings
         | 
| 250 | 
            +
                  #
         | 
| 251 | 
            +
                  # @param index array index of the server settings
         | 
| 252 | 
            +
                  # @param variables hash of variable and the corresponding value
         | 
| 253 | 
            +
                  def server_url(index, variables = {}, servers = nil)
         | 
| 254 | 
            +
                    servers = server_settings if servers.nil?
         | 
| 255 255 |  | 
| 256 | 
            -
             | 
| 257 | 
            -
             | 
| 258 | 
            -
             | 
| 259 | 
            -
             | 
| 256 | 
            +
                    # check array index out of bound
         | 
| 257 | 
            +
                    if index < 0 || index >= servers.size
         | 
| 258 | 
            +
                      raise ArgumentError, "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
         | 
| 259 | 
            +
                    end
         | 
| 260 260 |  | 
| 261 | 
            -
             | 
| 262 | 
            -
             | 
| 261 | 
            +
                    server = servers[index]
         | 
| 262 | 
            +
                    url = server[:url]
         | 
| 263 263 |  | 
| 264 | 
            -
             | 
| 264 | 
            +
                    return url unless server.key? :variables
         | 
| 265 265 |  | 
| 266 | 
            -
             | 
| 267 | 
            -
             | 
| 268 | 
            -
             | 
| 269 | 
            -
             | 
| 270 | 
            -
             | 
| 266 | 
            +
                    # go through variable and assign a value
         | 
| 267 | 
            +
                    server[:variables].each do |name, _variable|
         | 
| 268 | 
            +
                      if variables.key?(name)
         | 
| 269 | 
            +
                        if !server[:variables][name].key?(:enum_values) || server[:variables][name][:enum_values].include?(variables[name])
         | 
| 270 | 
            +
                          url.gsub! '{' + name.to_s + '}', variables[name]
         | 
| 271 | 
            +
                        else
         | 
| 272 | 
            +
                          raise ArgumentError,
         | 
| 273 | 
            +
                                "The variable `#{name}` in the server URL has invalid value #{variables[name]}. Must be #{server[:variables][name][:enum_values]}."
         | 
| 274 | 
            +
                        end
         | 
| 271 275 | 
             
                      else
         | 
| 272 | 
            -
                         | 
| 273 | 
            -
             | 
| 276 | 
            +
                        # use default value
         | 
| 277 | 
            +
                        url.gsub! '{' + name.to_s + '}', server[:variables][name][:default_value]
         | 
| 274 278 | 
             
                      end
         | 
| 275 | 
            -
                    else
         | 
| 276 | 
            -
                      # use default value
         | 
| 277 | 
            -
                      url.gsub! '{' + name.to_s + '}', server[:variables][name][:default_value]
         | 
| 278 279 | 
             
                    end
         | 
| 279 | 
            -
                  end
         | 
| 280 280 |  | 
| 281 | 
            -
             | 
| 281 | 
            +
                    url
         | 
| 282 | 
            +
                  end
         | 
| 282 283 | 
             
                end
         | 
| 283 284 | 
             
              end
         | 
| 284 | 
            -
              end
         | 
| 285 285 | 
             
            end
         |