2024-11-15 13:49:37 -05:00
|
|
|
class Provider::PlaidSandbox < Provider::Plaid
|
|
|
|
attr_reader :client
|
|
|
|
|
|
|
|
def initialize
|
|
|
|
@client = create_client
|
2025-05-23 18:58:22 -04:00
|
|
|
@region = :us
|
|
|
|
end
|
|
|
|
|
|
|
|
def create_public_token(username: nil)
|
|
|
|
client.sandbox_public_token_create(
|
|
|
|
Plaid::SandboxPublicTokenCreateRequest.new(
|
|
|
|
institution_id: "ins_109508", # "First Platypus Bank" (Plaid's sandbox institution that works with all products)
|
|
|
|
initial_products: [ "transactions", "investments", "liabilities" ],
|
|
|
|
options: {
|
|
|
|
override_username: username || "custom_test"
|
|
|
|
}
|
|
|
|
)
|
|
|
|
).public_token
|
2024-11-15 13:49:37 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def fire_webhook(item, type: "TRANSACTIONS", code: "SYNC_UPDATES_AVAILABLE")
|
|
|
|
client.sandbox_item_fire_webhook(
|
|
|
|
Plaid::SandboxItemFireWebhookRequest.new(
|
|
|
|
access_token: item.access_token,
|
|
|
|
webhook_type: type,
|
|
|
|
webhook_code: code,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2025-05-25 08:12:54 -04:00
|
|
|
def reset_login(item)
|
|
|
|
client.sandbox_item_reset_login(
|
|
|
|
Plaid::SandboxItemResetLoginRequest.new(
|
|
|
|
access_token: item.access_token
|
|
|
|
)
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2024-11-15 13:49:37 -05:00
|
|
|
private
|
|
|
|
def create_client
|
|
|
|
raise "Plaid sandbox is not supported in production" if Rails.env.production?
|
|
|
|
|
|
|
|
api_client = Plaid::ApiClient.new(
|
|
|
|
Rails.application.config.plaid
|
|
|
|
)
|
|
|
|
|
|
|
|
Plaid::PlaidApi.new(api_client)
|
|
|
|
end
|
|
|
|
end
|