react-native-plaid-link-sdk
Version:
React Native Plaid Link SDK
630 lines (568 loc) • 28.2 kB
text/typescript
interface CommonPlaidLinkOptions {
logLevel?: LinkLogLevel;
extras?: Record<string, any>;
}
export type LinkTokenConfiguration = (CommonPlaidLinkOptions & {
token: string;
// A `Bool` indicating that Link should skip displaying a loading animation until the Link UI is fully loaded.
// This can be used to display custom loading UI while Link content is loading (and will skip any initial loading UI in Link).
// Note: Dismiss custom loading UI on the OPEN & EXIT events.
//
// Note: This should be set to `true` when setting the `eu_config.headless` field in /link/token/create requests to `true`.
// For reference, see https://plaid.com/docs/api/tokens/#link-token-create-request-eu-config-headless
noLoadingState?: boolean;
});
export enum LinkLogLevel {
DEBUG="debug",
INFO="info",
WARN="warn",
ERROR="error",
}
export enum PlaidEnvironment {
PRODUCTION = 'production',
DEVELOPMENT = 'development',
SANDBOX = 'sandbox',
}
export enum PlaidProduct {
ASSETS="assets",
AUTH="auth",
DEPOSIT_SWITCH="deposit_switch",
IDENTITY="identity",
INCOME="income",
INVESTMENTS="investments",
LIABILITIES="liabilities",
LIABILITIES_REPORT="liabilities_report",
PAYMENT_INITIATION="payment_initiation",
TRANSACTIONS="transactions",
}
export enum LinkAccountType {
CREDIT = 'credit',
DEPOSITORY = 'depository',
INVESTMENT = 'investment',
LOAN = 'loan',
OTHER = 'other',
}
export enum LinkAccountSubtypes {
ALL = 'all',
CREDIT_CARD = 'credit card',
PAYPAL = 'paypal',
AUTO = 'auto',
BUSINESS = 'business',
COMMERCIAL = 'commercial',
CONSTRUCTION = 'construction',
CONSUMER = 'consumer',
HOME_EQUITY = 'home equity',
LINE_OF_CREDIT = 'line of credit',
LOAN = 'loan',
MORTGAGE = 'mortgage',
OVERDRAFT = 'overdraft',
STUDENT = 'student',
CASH_MANAGEMENT = 'cash management',
CD = 'cd',
CHECKING = 'checking',
EBT = 'ebt',
HSA = 'hsa',
MONEY_MARKET = 'money market',
PREPAID = 'prepaid',
SAVINGS = 'savings',
FOUR_0_1_A = '401a',
FOUR_0_1_K = '401k',
FOUR_0_3_B = '403B',
FOUR_5_7_B = '457b',
FIVE_2_9 = '529',
BROKERAGE = 'brokerage',
CASH_ISA = 'cash isa',
EDUCATION_SAVINGS_ACCOUNT = 'education savings account',
FIXED_ANNUNITY = 'fixed annuity',
GIC = 'gic',
HEALTH_REIMBURSEMENT_ARRANGEMENT = 'health reimbursement arrangement',
IRA = 'ira',
ISA = 'isa',
KEOGH = 'keogh',
LIF = 'lif',
LIRA = 'lira',
LRIF = 'lrif',
LRSP = 'lrsp',
MUTUAL_FUND = 'mutual fund',
NON_TAXABLE_BROKERAGE_ACCOUNT = 'non-taxable brokerage account',
PENSION = 'pension',
PLAN = 'plan',
PRIF = 'prif',
PROFIT_SHARING_PLAN = 'profit sharing plan',
RDSP = 'rdsp',
RESP = 'resp',
RETIREMENT = 'retirement',
RLIF = 'rlif',
ROTH_401K = 'roth 401k',
ROTH = 'roth',
RRIF = 'rrif',
RRSP = 'rrsp',
SARSEP = 'sarsep',
SEP_IRA = 'sep ira',
SIMPLE_IRA = 'simple ira',
SIPP = 'sipp',
STOCK_PLAN = 'stock plan',
TFSA = 'tfsa',
THRIFT_SAVINGS_PLAN = 'thrift savings plan',
TRUST = 'trust',
UGMA = 'ugma',
UTMA = 'utma',
VARIABLE_ANNUITY = 'variable annuity'
}
export interface LinkAccountSubtype {
}
export class LinkAccountSubtypeCredit implements LinkAccountSubtype {
public static readonly ALL = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.ALL);
public static readonly CREDIT_CARD = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.CREDIT_CARD);
public static readonly PAYPAL = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.PAYPAL);
private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { }
}
export class LinkAccountSubtypeDepository implements LinkAccountSubtype {
public static readonly ALL = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.ALL);
public static readonly CASH_MANAGEMENT = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CASH_MANAGEMENT);
public static readonly CD = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CD);
public static readonly CHECKING = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CHECKING);
public static readonly EBT = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.EBT);
public static readonly HSA = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.HSA);
public static readonly MONEY_MARKET = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.MONEY_MARKET);
public static readonly PAYPAL = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.PAYPAL);
public static readonly PREPAID = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.PREPAID);
public static readonly SAVINGS = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.SAVINGS);
private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { }
}
export class LinkAccountSubtypeInvestment implements LinkAccountSubtype {
public static readonly ALL = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ALL);
public static readonly BROKERAGE = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.BROKERAGE);
public static readonly CASH_ISA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.CASH_ISA);
public static readonly EDUCATION_SAVINGS_ACCOUNT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.EDUCATION_SAVINGS_ACCOUNT);
public static readonly FIXED_ANNUNITY = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FIXED_ANNUNITY);
public static readonly GIC = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.GIC);
public static readonly HEALTH_REIMBURSEMENT_ARRANGEMENT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.HEALTH_REIMBURSEMENT_ARRANGEMENT);
public static readonly HSA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.HSA);
public static readonly INVESTMENT_401A = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_1_A);
public static readonly INVESTMENT_401K = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_1_K);
public static readonly INVESTMENT_403B = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_3_B);
public static readonly INVESTMENT_457B = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_5_7_B);
public static readonly INVESTMENT_529 = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FIVE_2_9);
public static readonly IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.IRA);
public static readonly ISA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ISA);
public static readonly KEOGH = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.KEOGH);
public static readonly LIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LIF);
public static readonly LIRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LIRA);
public static readonly LRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LRIF);
public static readonly LRSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LRSP);
public static readonly MUTUAL_FUND = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.MUTUAL_FUND);
public static readonly NON_TAXABLE_BROKERAGE_ACCOUNT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.NON_TAXABLE_BROKERAGE_ACCOUNT);
public static readonly PENSION = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PENSION);
public static readonly PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PLAN);
public static readonly PRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PRIF);
public static readonly PROFIT_SHARING_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PROFIT_SHARING_PLAN);
public static readonly RDSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RDSP);
public static readonly RESP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RESP);
public static readonly RETIREMENT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RETIREMENT);
public static readonly RLIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RLIF);
public static readonly ROTH = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ROTH);
public static readonly ROTH_401K = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ROTH_401K);
public static readonly RRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RRIF);
public static readonly RRSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RRSP);
public static readonly SARSEP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SARSEP);
public static readonly SEP_IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SEP_IRA);
public static readonly SIMPLE_IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SIMPLE_IRA);
public static readonly SIIP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SIPP);
public static readonly STOCK_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.STOCK_PLAN);
public static readonly TFSA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.TFSA);
public static readonly THRIFT_SAVINGS_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.THRIFT_SAVINGS_PLAN);
public static readonly TRUST = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.TRUST);
public static readonly UGMA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.UGMA);
public static readonly UTMA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.UTMA);
public static readonly VARIABLE_ANNUITY = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.VARIABLE_ANNUITY);
private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { }
}
export class LinkAccountSubtypeLoan implements LinkAccountSubtype {
public static readonly ALL = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.ALL);
public static readonly AUTO = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.AUTO);
public static readonly BUSINESS = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.BUSINESS);
public static readonly COMMERCIAL = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.COMMERCIAL);
public static readonly CONSTRUCTION = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.CONSTRUCTION);
public static readonly CONSUMER = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.CONSUMER);
public static readonly HOME_EQUITY = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.HOME_EQUITY);
public static readonly LINE_OF_CREDIT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.LINE_OF_CREDIT);
public static readonly LOAN = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.LOAN);
public static readonly MORTGAGE = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.MORTGAGE);
public static readonly OVERDRAFT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.OVERDRAFT);
public static readonly STUDENT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.STUDENT);
private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { }
}
export class LinkAccountSubtypeUnknown implements LinkAccountSubtype {
constructor(public readonly type: string, public readonly subtype: string) { }
}
export interface LinkSuccess {
publicToken: string;
metadata: LinkSuccessMetadata;
}
export interface LinkSuccessMetadata {
institution?: LinkInstitution;
accounts: LinkAccount[];
linkSessionId: string;
metadataJson?: string;
}
export interface LinkAccount {
id: string;
name?: string;
mask?: string;
type: LinkAccountType;
subtype: LinkAccountSubtype;
verificationStatus?: LinkAccountVerificationStatus;
}
export enum LinkAccountVerificationStatus {
PENDING_AUTOMATIC_VERIFICATION = 'pending_automatic_verification',
PENDING_MANUAL_VERIFICATION = 'pending_manual_verification',
MANUALLY_VERIFIED = 'manually_verified',
}
export interface LinkInstitution {
id: string;
name: string;
}
export interface LinkExit {
error?: LinkError;
metadata: LinkExitMetadata;
}
export interface LinkExitMetadata {
status?: LinkExitMetadataStatus;
institution?: LinkInstitution;
linkSessionId: string;
requestId: string;
metadataJson?: string;
}
export enum LinkExitMetadataStatus {
CONNECTED = 'connected',
CHOOSE_DEVICE = 'choose_device',
REQUIRES_ACCOUNT_SELECTION = 'requires_account_selection',
REQUIRES_CODE = 'requires_code',
REQUIRES_CREDENTIALS = 'requires_credentials',
REQUIRES_EXTERNAL_ACTION = 'requires_external_action',
REQUIRES_OAUTH = 'requires_oauth',
REQUIRES_QUESTIONS = 'requires_questions',
REQUIRES_RECAPTCHA = 'requires_recaptcha',
REQUIRES_SELECTIONS = 'requires_selections',
REQUIRES_DEPOSIT_SWITCH_ALLOCATION_CONFIGURATION = 'requires_deposit_switch_allocation_configuration',
REQUIRES_DEPOSIT_SWITCH_ALLOCATION_SELECTION = 'requires_deposit_switch_allocation_selection',
}
export interface LinkError {
errorCode: LinkErrorCode;
errorType: LinkErrorType;
errorMessage: string;
/** @deprecated DO NOT USE, data not guaranteed. Use `displayMessage` instead */
errorDisplayMessage?: string;
displayMessage?: string;
errorJson?: string;
}
export enum LinkErrorCode {
// ITEM_ERROR
INVALID_CREDENTIALS = "INVALID_CREDENTIALS",
INVALID_MFA = "INVALID_MFA",
ITEM_LOGIN_REQUIRED = "ITEM_LOGIN_REQUIRED",
INSUFFICIENT_CREDENTIALS = "INSUFFICIENT_CREDENTIALS",
ITEM_LOCKED = "ITEM_LOCKED",
USER_SETUP_REQUIRED = "USER_SETUP_REQUIRED",
MFA_NOT_SUPPORTED = "MFA_NOT_SUPPORTED",
INVALID_SEND_METHOD = "INVALID_SEND_METHOD",
NO_ACCOUNTS = "NO_ACCOUNTS",
ITEM_NOT_SUPPORTED = "ITEM_NOT_SUPPORTED",
TOO_MANY_VERIFICATION_ATTEMPTS = "TOO_MANY_VERIFICATION_ATTEMPTS",
INVALD_UPDATED_USERNAME = "INVALD_UPDATED_USERNAME",
INVALID_UPDATED_USERNAME = "INVALID_UPDATED_USERNAME",
ITEM_NO_ERROR = "ITEM_NO_ERROR",
item_no_error = "item-no-error",
NO_AUTH_ACCOUNTS = "NO_AUTH_ACCOUNTS",
NO_INVESTMENT_ACCOUNTS = "NO_INVESTMENT_ACCOUNTS",
NO_INVESTMENT_AUTH_ACCOUNTS = "NO_INVESTMENT_AUTH_ACCOUNTS",
NO_LIABILITY_ACCOUNTS = "NO_LIABILITY_ACCOUNTS",
PRODUCTS_NOT_SUPPORTED = "PRODUCTS_NOT_SUPPORTED",
ITEM_NOT_FOUND = "ITEM_NOT_FOUND",
ITEM_PRODUCT_NOT_READY = "ITEM_PRODUCT_NOT_READY",
// INSTITUTION_ERROR
INSTITUTION_DOWN = "INSTITUTION_DOWN",
INSTITUTION_NOT_RESPONDING = "INSTITUTION_NOT_RESPONDING",
INSTITUTION_NOT_AVAILABLE = "INSTITUTION_NOT_AVAILABLE",
INSTITUTION_NO_LONGER_SUPPORTED = "INSTITUTION_NO_LONGER_SUPPORTED",
// API_ERROR
INTERNAL_SERVER_ERROR = "INTERNAL_SERVER_ERROR",
PLANNED_MAINTENANCE = "PLANNED_MAINTENANCE",
// ASSET_REPORT_ERROR
PRODUCT_NOT_ENABLED = "PRODUCT_NOT_ENABLED",
DATA_UNAVAILABLE = "DATA_UNAVAILABLE",
ASSET_PRODUCT_NOT_READY = "ASSET_PRODUCT_NOT_READY",
ASSET_REPORT_GENERATION_FAILED = "ASSET_REPORT_GENERATION_FAILED",
INVALID_PARENT = "INVALID_PARENT",
INSIGHTS_NOT_ENABLED = "INSIGHTS_NOT_ENABLED",
INSIGHTS_PREVIOUSLY_NOT_ENABLED = "INSIGHTS_PREVIOUSLY_NOT_ENABLED",
// BANK_TRANSFER_ERROR
BANK_TRANSFER_LIMIT_EXCEEDED = "BANK_TRANSFER_LIMIT_EXCEEDED",
BANK_TRANSFER_MISSING_ORIGINATION_ACCOUNT = "BANK_TRANSFER_MISSING_ORIGINATION_ACCOUNT",
BANK_TRANSFER_INVALID_ORIGINATION_ACCOUNT = "BANK_TRANSFER_INVALID_ORIGINATION_ACCOUNT",
BANK_TRANSFER_ACCOUNT_BLOCKED = "BANK_TRANSFER_ACCOUNT_BLOCKED",
BANK_TRANSFER_INSUFFICIENT_FUNDS = "BANK_TRANSFER_INSUFFICIENT_FUNDS",
BANK_TRANSFER_NOT_CANCELLABLE = "BANK_TRANSFER_NOT_CANCELLABLE",
BANK_TRANSFER_UNSUPPORTED_ACCOUNT_TYPE = "BANK_TRANSFER_UNSUPPORTED_ACCOUNT_TYPE",
BANK_TRANSFER_UNSUPPORTED_ENVIRONMENT = "BANK_TRANSFER_UNSUPPORTED_ENVIRONMENT",
// SANDBOX_ERROR
SANDBOX_PRODUCT_NOT_ENABLED = "SANDBOX_PRODUCT_NOT_ENABLED",
SANDBOX_WEBHOOK_INVALID = "SANDBOX_WEBHOOK_INVALID",
SANDBOX_BANK_TRANSFER_EVENT_TRANSITION_INVALID = "SANDBOX_BANK_TRANSFER_EVENT_TRANSITION_INVALID",
// INVALID_REQUEST
MISSING_FIELDS = "MISSING_FIELDS",
UNKNOWN_FIELDS = "UNKNOWN_FIELDS",
INVALID_FIELD = "INVALID_FIELD",
INCOMPATIBLE_API_VERSION = "INCOMPATIBLE_API_VERSION",
INVALID_BODY = "INVALID_BODY",
INVALID_HEADERS = "INVALID_HEADERS",
NOT_FOUND = "NOT_FOUND",
NO_LONGER_AVAILABLE = "NO_LONGER_AVAILABLE",
SANDBOX_ONLY = "SANDBOX_ONLY",
INVALID_ACCOUNT_NUMBER = "INVALID_ACCOUNT_NUMBER",
// INVALID_INPUT
// From above ITEM_LOGIN_REQUIRED = "INVALID_CREDENTIALS",
INCORRECT_DEPOSIT_AMOUNTS = "INCORRECT_DEPOSIT_AMOUNTS",
UNAUTHORIZED_ENVIRONMENT = "UNAUTHORIZED_ENVIRONMENT",
INVALID_PRODUCT = "INVALID_PRODUCT",
UNAUTHORIZED_ROUTE_ACCESS = "UNAUTHORIZED_ROUTE_ACCESS",
DIRECT_INTEGRATION_NOT_ENABLED = "DIRECT_INTEGRATION_NOT_ENABLED",
INVALID_API_KEYS = "INVALID_API_KEYS",
INVALID_ACCESS_TOKEN = "INVALID_ACCESS_TOKEN",
INVALID_PUBLIC_TOKEN = "INVALID_PUBLIC_TOKEN",
INVALID_LINK_TOKEN = "INVALID_LINK_TOKEN",
INVALID_PROCESSOR_TOKEN = "INVALID_PROCESSOR_TOKEN",
INVALID_AUDIT_COPY_TOKEN = "INVALID_AUDIT_COPY_TOKEN",
INVALID_ACCOUNT_ID = "INVALID_ACCOUNT_ID",
MICRODEPOSITS_ALREADY_VERIFIED = "MICRODEPOSITS_ALREADY_VERIFIED",
// INVALID_RESULT
PLAID_DIRECT_ITEM_IMPORT_RETURNED_INVALID_MFA = "PLAID_DIRECT_ITEM_IMPORT_RETURNED_INVALID_MFA",
// RATE_LIMIT_EXCEEDED
ACCOUNTS_LIMIT = "ACCOUNTS_LIMIT",
ADDITION_LIMIT = "ADDITION_LIMIT",
AUTH_LIMIT = "AUTH_LIMIT",
BALANCE_LIMIT = "BALANCE_LIMIT",
IDENTITY_LIMIT = "IDENTITY_LIMIT",
ITEM_GET_LIMIT = "ITEM_GET_LIMIT",
RATE_LIMIT = "RATE_LIMIT",
TRANSACTIONS_LIMIT = "TRANSACTIONS_LIMIT",
// RECAPTCHA_ERROR
RECAPTCHA_REQUIRED = "RECAPTCHA_REQUIRED",
RECAPTCHA_BAD = "RECAPTCHA_BAD",
// OAUTH_ERROR
INCORRECT_OAUTH_NONCE = "INCORRECT_OAUTH_NONCE",
OAUTH_STATE_ID_ALREADY_PROCESSED = "OAUTH_STATE_ID_ALREADY_PROCESSED",
}
export enum LinkErrorType {
BANK_TRANSFER = 'BANK_TRANSFER_ERROR',
INVALID_REQUEST = 'INVALID_REQUEST',
INVALID_RESULT = 'INVALID_RESULT',
INVALID_INPUT = 'INVALID_INPUT',
INSTITUTION_ERROR = 'INSTITUTION_ERROR',
RATE_LIMIT_EXCEEDED = 'RATE_LIMIT_EXCEEDED',
API_ERROR = 'API_ERROR',
ITEM_ERROR = 'ITEM_ERROR',
AUTH_ERROR = 'AUTH_ERROR',
ASSET_REPORT_ERROR = 'ASSET_REPORT_ERROR',
SANDBOX_ERROR = 'SANDBOX_ERROR',
RECAPTCHA_ERROR = 'RECAPTCHA_ERROR',
OAUTH_ERROR = 'OAUTH_ERROR',
}
export type LinkEventListener = (linkEvent: LinkEvent) => void
export interface LinkEvent {
eventName: LinkEventName;
metadata: LinkEventMetadata;
}
export interface LinkEventMetadata {
accountNumberMask?: string;
linkSessionId: string;
mfaType?: string;
requestId?: string;
viewName: LinkEventViewName;
errorCode?: string;
errorMessage?: string;
errorType?: string;
exitStatus?: string;
institutionId?: string;
institutionName?: string;
institutionSearchQuery?: string;
isUpdateMode?: string;
matchReason?: string;
issueId?: string;
issueDescription?: string;
issueDetectedAt?: string;
// see possible values for selection at https://plaid.com/docs/link/web/#link-web-onevent-selection
selection?: null | string;
timestamp: string;
metadata_json: string;
}
export enum LinkEventName {
AUTO_SELECT_SAVED_INSTITUTION = 'AUTO_SELECT_SAVED_INSTITUTION',
AUTO_SUBMIT_PHONE = 'AUTO_SUBMIT_PHONE',
BANK_INCOME_INSIGHTS_COMPLETED = 'BANK_INCOME_INSIGHTS_COMPLETED',
CLOSE_OAUTH = 'CLOSE_OAUTH',
CONNECT_NEW_INSTITUTION = 'CONNECT_NEW_INSTITUTION',
ERROR = 'ERROR',
EXIT = 'EXIT',
FAIL_OAUTH = 'FAIL_OAUTH',
HANDOFF = 'HANDOFF',
IDENTITY_MATCH_PASSED = 'IDENTITY_MATCH_PASSED',
IDENTITY_MATCH_FAILED = 'IDENTITY_MATCH_FAILED',
IDENTITY_VERIFICATION_CLOSE_UI = 'IDENTITY_VERIFICATION_CLOSE_UI',
IDENTITY_VERIFICATION_CREATE_SESSION = 'IDENTITY_VERIFICATION_CREATE_SESSION',
IDENTITY_VERIFICATION_FAIL_SESSION = 'IDENTITY_VERIFICATION_FAIL_SESSION',
IDENTITY_VERIFICATION_FAIL_STEP = 'IDENTITY_VERIFICATION_FAIL_STEP',
IDENTITY_VERIFICATION_OPEN_UI = 'IDENTITY_VERIFICATION_OPEN_UI',
IDENTITY_VERIFICATION_PASS_SESSION = 'IDENTITY_VERIFICATION_PASS_SESSION',
IDENTITY_VERIFICATION_PASS_STEP = 'IDENTITY_VERIFICATION_PASS_STEP',
IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION = 'IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION',
IDENTITY_VERIFICATION_PENDING_REVIEW_STEP = 'IDENTITY_VERIFICATION_PENDING_REVIEW_STEP',
IDENTITY_VERIFICATION_RESUME_SESSION = 'IDENTITY_VERIFICATION_RESUME_SESSION',
IDENTITY_VERIFICATION_RESUME_UI = 'IDENTITY_VERIFICATION_RESUME_UI',
IDENTITY_VERIFICATION_START_STEP = 'IDENTITY_VERIFICATION_START_STEP',
ISSUE_FOLLOWED = 'ISSUE_FOLLOWED',
LAYER_AUTOFILL_NOT_AVAILABLE = "LAYER_AUTOFILL_NOT_AVAILABLE",
LAYER_NOT_AVAILABLE = 'LAYER_NOT_AVAILABLE',
LAYER_READY = 'LAYER_READY',
MATCHED_CONSENT = 'MATCHED_CONSENT',
MATCHED_SELECT_INSTITUTION = 'MATCHED_SELECT_INSTITUTION',
MATCHED_SELECT_VERIFY_METHOD = 'MATCHED_SELECT_VERIFY_METHOD',
OPEN = 'OPEN',
OPEN_MY_PLAID = 'OPEN_MY_PLAID',
OPEN_OAUTH = 'OPEN_OAUTH',
PLAID_CHECK_PANE = 'PLAID_CHECK_PANE',
PROFILE_ELIGIBILITY_CHECK_ERROR = 'PROFILE_ELIGIBILITY_CHECK_ERROR',
PROFILE_ELIGIBILITY_CHECK_READY = 'PROFILE_ELIGIBILITY_CHECK_READY',
REMEMBER_ME_DISABLED = 'REMEMBER_ME_DISABLED',
REMEMBER_ME_ENABLED = 'REMEMBER_ME_ENABLED',
REMEMBER_ME_HOLDOUT = 'REMEMBER_ME_HOLDOUT',
SEARCH_INSTITUTION = 'SEARCH_INSTITUTION',
SELECT_ACCOUNT = 'SELECT_ACCOUNT',
SELECT_AUTH_TYPE = 'SELECT_AUTH_TYPE',
SELECT_BRAND = 'SELECT_BRAND',
SELECT_DEGRADED_INSTITUTION = 'SELECT_DEGRADED_INSTITUTION',
SELECT_DOWN_INSTITUTION = 'SELECT_DOWN_INSTITUTION',
SELECT_FILTERED_INSTITUTION = 'SELECT_FILTERED_INSTITUTION',
SELECT_INSTITUTION = 'SELECT_INSTITUTION',
SELECT_SAVED_ACCOUNT = 'SELECT_SAVED_ACCOUNT',
SELECT_SAVED_INSTITUTION = 'SELECT_SAVED_INSTITUTION',
SKIP_SUBMIT_EMAIL = 'SKIP_SUBMIT_EMAIL',
SKIP_SUBMIT_PHONE = 'SKIP_SUBMIT_PHONE',
SUBMIT_ACCOUNT_NUMBER = 'SUBMIT_ACCOUNT_NUMBER',
SUBMIT_CREDENTIALS = 'SUBMIT_CREDENTIALS',
SUBMIT_DOCUMENTS = 'SUBMIT_DOCUMENTS',
SUBMIT_DOCUMENTS_ERROR = 'SUBMIT_DOCUMENTS_ERROR',
SUBMIT_DOCUMENTS_SUCCESS = 'SUBMIT_DOCUMENTS_SUCCESS',
SUBMIT_EMAIL = 'SUBMIT_EMAIL',
SUBMIT_MFA = 'SUBMIT_MFA',
SUBMIT_PHONE = 'SUBMIT_PHONE',
SUBMIT_OTP = 'SUBMIT_OTP',
SUBMIT_ROUTING_NUMBER = 'SUBMIT_ROUTING_NUMBER',
TRANSITION_VIEW = 'TRANSITION_VIEW',
VERIFY_PHONE = 'VERIFY_PHONE',
VIEW_DATA_TYPES = 'VIEW_DATA_TYPES',
}
export enum LinkEventViewName {
ACCEPT_TOS = 'ACCEPT_TOS',
CONNECTED = 'CONNECTED',
CONSENT = 'CONSENT',
CREDENTIAL = 'CREDENTIAL',
DATA_TRANSPARENCY = 'DATA_TRANSPARENCY',
DATA_TRANSPARENCY_CONSENT = 'DATA_TRANSPARENCY_CONSENT',
DOCUMENTARY_VERIFICATION = 'DOCUMENTARY_VERIFICATION',
ERROR = 'ERROR',
EXIT = 'EXIT',
KYC_CHECK = 'KYC_CHECK',
SELFIE_CHECK = 'SELFIE_CHECK',
LOADING = 'LOADING',
MATCHED_CONSENT = 'MATCHED_CONSENT',
MATCHED_CREDENTIAL = 'MATCHED_CREDENTIAL',
MATCHED_MFA = 'MATCHED_MFA',
MFA = 'MFA',
NUMBERS = 'NUMBERS',
NUMBERS_SELECT_INSTITUTION = 'NUMBERS_SELECT_INSTITUTION',
OAUTH = 'OAUTH',
RECAPTCHA = 'RECAPTCHA',
RISK_CHECK = 'RISK_CHECK',
SCREENING = 'SCREENING',
SELECT_ACCOUNT = 'SELECT_ACCOUNT',
SELECT_AUTH_TYPE = 'SELECT_AUTH_TYPE',
SUBMIT_EMAIL = "SUBMIT_EMAIL",
SUBMIT_PHONE = 'SUBMIT_PHONE',
VERIFY_PHONE = 'VERIFY_PHONE',
SELECT_SAVED_INSTITUTION = 'SELECT_SAVED_INSTITUTION',
SELECT_SAVED_ACCOUNT = 'SELECT_SAVED_ACCOUNT',
SELECT_BRAND = 'SELECT_BRAND',
SELECT_INSTITUTION = 'SELECT_INSTITUTION',
SUBMIT_DOCUMENTS = 'SUBMIT_DOCUMENTS',
SUBMIT_DOCUMENTS_SUCCESS = 'SUBMIT_DOCUMENTS_SUCCESS',
SUBMIT_DOCUMENTS_ERROR = 'SUBMIT_DOCUMENTS_ERROR',
UPLOAD_DOCUMENTS = 'UPLOAD_DOCUMENTS',
VERIFY_EMAIL = "VERIFY_EMAIL",
VERIFY_SMS = 'VERIFY_SMS',
}
/// Methods to present Link on iOS.
/// FULL_SCREEN is the converts to UIModalPresentationOverFullScreen on the native side.
/// MODAL will use the default presentation style for iOS which is UIModalPresentationAutomatic.
export enum LinkIOSPresentationStyle {
FULL_SCREEN = 'FULL_SCREEN',
MODAL = 'MODAL'
}
export type LinkSuccessListener = (LinkSuccess: LinkSuccess) => void
export type LinkExitListener = (LinkExit: LinkExit) => void
export type LinkOnEventListener = (LinkEvent: LinkEvent) => void
export interface PlaidLinkProps {
tokenConfig: LinkTokenConfiguration
onSuccess: LinkSuccessListener
onExit?: LinkExitListener
iOSPresentationStyle?: LinkIOSPresentationStyle
logLevel?: LinkLogLevel
onPress?(): any
}
export interface LinkOpenProps {
onSuccess: LinkSuccessListener
onExit?: LinkExitListener
iOSPresentationStyle?: LinkIOSPresentationStyle
logLevel?: LinkLogLevel
}
export type PlaidLinkComponentProps = (PlaidLinkProps & {
children: React.ReactNode
});
export enum FinanceKitErrorType {
InvalidToken = 0,
PermissionError = 1,
LinkApiError = 2,
PermissionAccessError = 3,
Unknown = 4
}
interface InvalidTokenError {
type: FinanceKitErrorType.InvalidToken;
message: string;
}
interface PermissionError {
type: FinanceKitErrorType.PermissionError;
message: string;
}
interface LinkApiError {
type: FinanceKitErrorType.LinkApiError;
message: string;
}
interface PermissionAccessError {
type: FinanceKitErrorType.PermissionAccessError;
message: string;
}
interface UnknownError {
type: FinanceKitErrorType.Unknown;
message: string;
}
export type FinanceKitError =
| InvalidTokenError
| PermissionError
| LinkApiError
| PermissionAccessError
| UnknownError;
export interface SubmissionData {
phoneNumber?: string;
dateOfBirth?: string;
};