class YodleeWrap::YodleeApi

Attributes

base_url[R]
cobrand_name[R]
cobranded_auth[R]
cobranded_password[R]
cobranded_username[R]
logger[R]
proxy_url[R]
user_auth[R]
webhook_endpoint[R]

Public Class Methods

new(config = {}) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 9
def initialize(config = {})
  configure(config)
end

Public Instance Methods

add_provider_account(provider_id, provider_params) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 127
def add_provider_account(provider_id, provider_params)
  user_session_execute_api(:post, "/v1/providers/providerAccounts?providerId=#{provider_id}", provider_params)
end
cobranded_auth_header() click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 163
def cobranded_auth_header
  "cobSession=#{cobranded_session_token}"
end
cobranded_login() click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 31
def cobranded_login
  params = {
    cobrand: {
      cobrandLogin: cobranded_username,
      cobrandPassword: cobranded_password,
      locale: "en_US"
    }
  }
  response = execute_api(:post, '/v1/cobrand/login', params)

  @cobranded_auth = response.success? ? response.body : nil

  response
end
cobranded_session_execute_api(method, url, params = {}) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 155
def cobranded_session_execute_api(method, url, params = {})
  execute_api(method, url, params, cobranded_auth_header)
end
cobranded_session_token() click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 186
def cobranded_session_token
  return nil if cobranded_auth.nil?
  cobranded_auth.fetch('session', {}).fetch('cobSession', nil)
end
configure(config = {}) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 13
def configure(config = {})
  validate(config)
  @cobrand_name = config[:cobrand_name] || YodleeWrap::Config.cobrand_name || 'restserver'
  @cobranded_username = config[:cobranded_username] || YodleeWrap::Config.cobranded_username
  @cobranded_password = config[:cobranded_password] || YodleeWrap::Config.cobranded_password
  @webhook_endpoint = config[:webhook_endpoint] || YodleeWrap::Config.webhook_endpoint
  @logger = config[:logger] || YodleeWrap::Config.logger
  info_log "YodleeApi configured with cobrand_name=#{cobrand_name} cobranded_username=#{cobranded_username} logger=#{logger}"
end
debug_log(msg) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 196
def debug_log(msg)
  logger.debug(msg)
end
delete_provider_account(provider_account_id) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 131
def delete_provider_account(provider_account_id)
  user_session_execute_api(:delete, "/v1/providers/providerAccounts/#{provider_account_id}")
end
execute_api(method, url, params, auth_header = '') click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 171
def execute_api(method, url, params, auth_header = '')
  debug_log "calling #{url} with #{params}"
  ssl_opts = { verify: false }
  connection = Faraday.new(url: base_url, ssl: ssl_opts, request: { proxy: [] })
  response = connection.send(method) do |request|
    request.url "#{base_url}#{url}"
    request.headers['Authorization'] = auth_header
    request.body = params.to_json unless params.empty?
    request.headers['Content-Type'] = 'application/json' unless params.empty?
  end
  body = JSON.parse(response.body.blank? ? '{}' : response.body)
  debug_log "response=#{response.status} success?=#{response.success?} body=#{body}"
  Response.new(body, response.status)
end
get_account(account_id, container_name) click to toggle source

the get account endpoint requires that the user provide the container type. Not sure why.

# File lib/yodlee_wrap/yodlee_api.rb, line 119
def get_account(account_id, container_name)
  user_session_execute_api(:get, "/v1/accounts/#{account_id}?container=#{container_name}")
end
get_accounts_for(provider_account_id) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 110
def get_accounts_for(provider_account_id)
  user_session_execute_api(:get, "/v1/accounts?providerAccountId=#{provider_account_id}")
end
get_all_accounts() click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 114
def get_all_accounts
  user_session_execute_api(:get, "/v1/accounts/")
end
get_all_provider_accounts() click to toggle source

Get all provider accounts for the currently logged in user.

# File lib/yodlee_wrap/yodlee_api.rb, line 143
def get_all_provider_accounts
  user_session_execute_api(:get, '/v1/providers/providerAccounts')
end
get_provider_account_status(provider_account_id) click to toggle source

After an account has been added, use the returned provider_account_id to get updates about the provider account. default to getting mfa questions if they are available.

# File lib/yodlee_wrap/yodlee_api.rb, line 138
def get_provider_account_status(provider_account_id)
  user_session_execute_api(:get, "/v1/providers/providerAccounts/#{provider_account_id}?include=credentials")
end
get_provider_details(provider_id) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 123
def get_provider_details(provider_id)
  user_session_execute_api(:get, "/v1/providers/#{provider_id}")
end
get_statements() click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 147
def get_statements
  user_session_execute_api(:get, '/v1/statements')
end
get_transactions() click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 106
def get_transactions
  user_session_execute_api(:get, "/v1/transactions")
end
info_log(msg) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 200
def info_log(msg)
  logger.info(msg)
end
login_or_register_user(username:, password:, email:, subscribe: true) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 91
def login_or_register_user(username:, password:, email:, subscribe: true)
  info_log "Attempting to log in #{username}"
  response = login_user(username: username, password: password)
  # TODO: look into what other errors could occur here
  if response.fail? && response.error_code == 'Y002'
    info_log "Invalid credentials for #{username}. Attempting to register"
    response = register_user(username: username, password: password, email: email, subscribe: subscribe)
  else
    info_log response.error_message
  end
  @user_auth = response.success? ? response.body : nil

  response
end
login_user(username:, password:) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 57
def login_user(username:, password:)
  params = user_params(username, password, nil)
  response = cobranded_session_execute_api(:post, '/v1/user/login', params)
  @user_auth = response.success? ? response.body : nil
  response
end
logout_user() click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 87
def logout_user
  user_session_execute_api(:post, '/v1/user/logout')
end
register_user(username:, password:, email:, options: {}, subscribe: true) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 64
def register_user(username:, password:, email:, options: {}, subscribe: true)
  params = user_params(username, password, email).merge(options)
  response = cobranded_session_execute_api(:post, '/v1/user/register', params)
  @user_auth = response.success? ? response.body : nil
  subscribe_user_to_refresh if response.success? && subscribe
  response
end
subscribe_user_to_refresh() click to toggle source

subscribe user to webhook refresh notifications

# File lib/yodlee_wrap/yodlee_api.rb, line 73
def subscribe_user_to_refresh
  params = {
    event: {
      callbackUrl: webhookEndpoint
    }
  }
  user_session_execute_api(:post, 'v1/cobrand/config/notifications/events/REFRESH', params)
end
unregister_user() click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 82
def unregister_user
  response = user_session_execute_api(:delete, 'v1/user/unregister')
  @user_auth = nil if response.success?
end
update_provider_account(provider_account_id, provider_params) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 151
def update_provider_account(provider_account_id, provider_params)
  user_session_execute_api(:put, "/v1/providers/providerAccounts?providerAccountIds=#{provider_account_id}", provider_params)
end
user_auth_header() click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 167
def user_auth_header
  cobranded_auth_header + ",userSession=#{user_session_token}"
end
user_params(username, password, email) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 46
def user_params(username, password, email)
  {
    user: {
      loginName: username,
      email: email,
      password: password,
      locale: 'en_US'
    }
  }
end
user_session_execute_api(method, url, params = {}) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 159
def user_session_execute_api(method, url, params = {})
  execute_api(method, url, params, user_auth_header)
end
user_session_token() click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 191
def user_session_token
  return nil if user_auth.nil?
  user_auth.fetch('user', {}).fetch('session', {}).fetch('userSession')
end
validate(config) click to toggle source
# File lib/yodlee_wrap/yodlee_api.rb, line 23
def validate(config)
  [:cobrand_name, :cobranded_username, :cobranded_password, :logger].each do |key|
    if config.key?(key) && config[key].nil?
      fail 'Invalid config provided to YodleeApi. Values may not be nil/blank.'
    end
  end
end