Skip to content

Instantly share code, notes, and snippets.

@stwiname
Last active May 10, 2019 20:08
Show Gist options
  • Select an option

  • Save stwiname/a455abc0947b16a60301244b8cf0c7d5 to your computer and use it in GitHub Desktop.

Select an option

Save stwiname/a455abc0947b16a60301244b8cf0c7d5 to your computer and use it in GitHub Desktop.
Typescript definition file for Braintree node module
//TODO update objects to show optional parameters
//TODO expand on Function parameters
//TODO add enum types
//TODO add error types
declare module Braintree {
/**********************
* Errors *
**********************/
export interface AuthenticationError extends Error {}
export interface AuthorizationError extends Error {}
export interface DownForMaintenanceError extends Error { }
export interface InvalidSignatureError extends Error { }
export interface InvalidChallengeError extends Error { }
export interface InvalidTransparentRedirectHashError extends Error { }
export interface NotFoundError extends Error { }
export interface ServerError extends Error { }
export interface TestOperationPerformedInProductionError extends Error { }
export interface TooManyRequestsError extends Error { }
export interface UnexpectedError extends Error { }
export interface UpgradeRequired extends Error { }
/**********************
* Response Objects *
**********************/
export function connect(
config: {
environment: Environment; //TODO get enum
merchantId: string;
publicKey: string;
privateKey: string;
}
): BraintreeGateway;
export class BraintreeGateway {
constructor(config: any);
addOn: AddOnGateway;
address: AddressGateway;
clientToken: ClientTokenGateway;
// creditCard: CreditCardGateway; //Deprecated, not bothering to implement
creditCardVerification: CreditCardVerificationGateway;
customer: CustomerGateway;
// discount: DiscountGateway; //Not yet supported
merchantAccountGateway: MerchantAccountGateway;
paymentMethodGateway: PaymentMethodGateway;
paymentMethodNonceGateway: PaymentMethodNonceGateway;
plan: PlanGateway;
settlementBatchSummary: SettlementBatchSummaryGateway;
subscription: SubscriptionGateway;
transaction: TransactionGateway;
webhookNotification: WebhookNotificationGateway;
}
export interface AddOn {
amount: string;
currentBillingCycle: number;
description: string;
id: string;
kind: string;
name: string;
neverExpires: boolean;
numberOfBillingCycles: number;
quantity: number;
}
export interface Address {
company: string;
countryCodeAlpha2: string;
countryCodeAlpha3: string;
countryCodeNumeric: string;
countryName: string;
createdAt: Date;
customerId: string;
extendedAddress: string;
firstName: string;
id: string;
lastName: string;
locality: string;
postalCode: string;
region: string;
streetAddress: string;
updatedAt: Date;
}
export interface AndroidPayCard extends PaymentMethod {
bin: string;
createdAt: Date;
customerId: string;
default: boolean;
expirationMonth: string;
expirationYear: string;
googleTransactionId: string;
imageUrl: string;
sourceCardLast4: string;
sourceCardType: string;
sourceDescription: string;
subscriptions: Subscription[];
updatedAt: Date;
virtualCardLast4: string;
virtualCardType: string;
}
export interface ApplePayCard extends PaymentMethod {
cardType: string;
createdAt: Date;
customerId: string;
default: boolean;
expirationMonth: string;
expirationYear: string;
expired: boolean;
imageUrl: string;
last4: string;
paymentInsuranceName: string;
sourceDescription: string;
subscriptions: Subscription[];
updatedAt: Date;
}
export interface CreditCard extends PaymentMethod {
bin: string;
billingAddress: Address;
cardType: string;
cardholderName: string;
contryOfIssuance: string;
createdAt: Date;
customerId: string;
customerLocation: any; //TODO create enum
debit: string;
default: boolean;
durbinRegulated: string;
expirationDate: string;
expirationMonth: string;
expirationYear: string;
expired: boolean;
healthcare: string;
imageUrl: string;
issuingBank: string;
last4: string;
maskedNumber: string;
payroll: string;
prepaid: string;
subscriptions: Subscription[];
uniqueNumberIdentifier: string;
updatedAt: Date;
}
export interface CreditCardVerification {
avsErrorResponseCode: string;
avsPostalCodeResponseCode: string;
avsScreetAddressResponseCode: string;
billing: {
company: string;
countryName: string;
extendedAddress: string;
firstName: string;
lastName: string;
locality: string;
postalCode: string;
region: string;
streetAddress: string;
}
createdAt: Date;
creditCard: {
bin: any; //TODO get type
cardType: any; //TODO get type
cardholderName: string;
commercial: any;// TODO get type
countryOfIssuance: string;
customerLocation: any; //TODO get type
debit: any; //TODO get type
durbinRegulated: any;//TODO get type
expirationMonth: string;
expirationYear: string;
healthcare: any;//TODO get type
issuingBank: string;
last4: any;//TODO get type
payroll: any;//TODO get type
prepaid: any; //TODO get type
token: string;
uniqueNumberIdentifier: any;//TODO get type
}
cvvResponseCode: any;//TODO get type
gatewayRejectionReason: string;
id: string;
merchantAccountId: string;
preprocessorResponseCode: string;
preprocessorResponseText: string;
riskData: {
decision: string;
id: string;
}
status: string;
}
export interface Customer {
addresses: Address[];
androidPayCards: AndroidPayCard[];
applePayCards: ApplePayCard[];
company: string;
createdAt: Date;
creditCards: CreditCard[];
customFields: any;
email: string;
fax: string;
firstName: string;
id: string;
lastName: string;
paymentMethods: PaymentMethod[];
paypalAccounts: PayPalAccount[];
phone: string;
updatedAt: Date;
website: string;
}
export interface Discount {
amount: string;
currentBillingCycle: number;
description: string;
id: string;
kind: string;
name: string;
neverExpires: string;
numberOfBillingCycles: number;
quantity: number;
}
export enum Environment {
Production,
Sandbox
}
export interface MerchantAccount {
business: {
addressDetails: { //TODO check type
locality: string;
postalCode: string;
region: string;
streetAddress: string;
}
dbaName: string;
legalName: string;
taxId: string;
}
currencyIsoCode: string;
default: boolean;
funding: {
accountNumberLast4: string;
descriptor: string;
destination: string;
email: string;
mobilePhone: string;
routingNumber: string;
}
id: string;
individual: {
addressDetails: { //TODO check type
locality: string;
postalCode: string;
region: string;
streetAddress: string;
}
dateOfBirth: string;
email: string;
firstName: string;
lastName: string;
phone: string;
ssnLast4: string;
}
masterMerchantAccount: any;//TODO get type probably MerchantAccount
status: string;
}
export interface PayPalAccount extends PaymentMethod {
billingAgreementId: string;
createdAt: Date;
customerId: string;
default: boolean;
email: string;
imageUrl: string;
subscriptions: Subscription[];
updatedAt: Date;
}
export interface PaymentMethod {
token: string;
}
export interface PaymentMethodNonce {
accountHolderName: any; //TODO get type
bic: any; //TODO get type
default: boolean;
maskedIban: any;//TODO get type
nonce: string;
securityQuestions: any;//TODO get type
threeDSecureInfo: {
enrolled: string;
liabilityShiftPossible: boolean;
liabilityShifted: boolean;
status: string;
}
type: string;
}
export interface Plan {
addOns: AddOn[];
billingDayOfMonth: number;
billingFrequency: any;//TODO get type
createdAt: Date;
currenyIsoCode: string;
description: string;
discounts: Discount[];
id: string;
name: string;
numberOfBillingCycles: number;
price: string;
trialDuration: any; //TODO get type
trialDurationUnit: string;
trialPeriod: boolean;//TODO check
updatedAt: Date;
}
export interface SettlementBatchSummary {
records: any[];
}
export interface Subscription {
addOns: AddOn[];
balance: string;
billingDayOfMonth: number;
billingPeriodEndDate: any;
billingPeriodStartDate: any;
createdAt: Date;
currentBillingCycle: number;
daysPastDue: number;
descriptor: any;
discounts: Discount[];
failureCount: number;
firstBillingDate: number;
id: string;
merchantAccountId: string;
neverExpires: boolean;
nextBillAmount: string;
nextBillingDate: any;
nextBillingPeriodAmount: string;
numberOfBillingCycles: number;
paidThroughDate: any;
paymentMethodToken: string;
planId: string;
price: string;
status: string;
statusHistory: any[];
transactions: Transaction[];
trialDuration: number;
trialDurationUnit: string;
trialPeriod: boolean;
updatedAt: Date;
}
export interface Transaction {
addOns: AddOn[];
additionalProccessorResponse: string;
amount: string;
avsErrorResponseCode: any; //TODO get type
avsPostalCodeResponseCode: any; //TODO get type
avsStreetAddressResponseCode: any; //TODO get type
billing: {
company: string;
countyCodeAlpha2: string;
countyCodeAlpha3: string;
countryCodeNumeric: string;
countryName: string;
extendedAddress: string;
firstName: string;
id: string;
lastName: string;
locality: string;
postalCode: string;
region: string;
streetAddress: string;
}
channel: string;
createdAt: Date;
creditCard: {
bin: any;//TODO get type
cardType: any; //TODO get type
cardholderName: string;
commercial: any;//TODO get type
countryOfIssuance: string;
customerLocation: string;
debit: any; //TOGO get type
durbinRegulated: any;//TODO get type
expirationDate: string;
expirationMonth: string;
expirationYear: string;
healthcare: any;//TODO get type
imageUrl: string;
issuingBank: string;
last4: any;//TODO get type
maskedNumber: any; //TODO get type
payroll: any;//TODO get type
prepaid: any;//TODO get type
token: string;
uniqueNumberIdentifier: string;
}
currencyIsoCode: string;
customFields: any;
customer: {
company: string;
email: string;
fax: string;
firstName: string;
id: string;
lastName: string;
phone: string;
website: string;
}
cvvResponseCode: any;//TODO get type
descriptor: {
name: string;
phone: string;
url: string;
}
disbursementDetails: {
disbursementDate: Date;//TODO check
fundsHels: boolean;
settlementAmount: string;
settlementCurrencyExchangeRate: any;//TODO get type
settlementCurrencyIsoCode: string;
success: any; //TODO get type;
}
discounts: Discount[];
}
export interface WebhookNotification {
Kind: {
AccountUpdaterDailyReport: string;
Check: string;
Disbursement: string;
DisbursementException: string;
DisputeOpened: string;
DisputeLost: string;
DisputeWon: string;
PartnerMerchantConnected: string;
PartnerMerchantDisconnected: string;
PartnerMerchantDeclined: string;
SubscriptionCanceled: string;
SubscriptionChargedSuccessfully: string;
SubscriptoinChargedUnsuccessfully: string;
SubscriptionExpired: string;
SubscriptionTrialEnded: string;
SubscriptionWentActive: string;
SubscriptionWEntPastDue: string;
SubMerchantAccountApproved: string;
SubMerchantAccountDeclined: string;
TransactionDisbursed: string;
}
subscription?: Subscription;
merchantAccount?: MerchantAccount;
disbursement?: any; //TODO create type
transaction?: Transaction;
partnerMerchant?: MerchantAccount;
dispute?: any; //TODO create type
accountUpdaterDailyReport?: any; //TODO create type
errors: any; //TODO get type
message: string;
}
/**********************
* Responses *
**********************/
// Base object for success response, should also contain the requested object
// eg customer.create() should have a customer object
interface successResult {
success: boolean,
message?: string
}
// The success response from certain requests TODO get request types
type successResponse<T extends successResult> = (
err: Error,
result: T
) => void;
type deleteResponse = (
err: Error //TODO is optional?
) => void;
// The iterable search results from a successful search
interface searchResult<T> {
each: (err: Error, result: T) => {}
}
// The callback function type from a search request
type searchResponse<T> = (
err: Error, //TODO is optional?
result: searchResult<T>
) => void;
/**********************
* Gateways *
**********************/
export class AddOnGateway {
all(callback?: (err: Error, result: AddOn[]) => {}): void;
}
export class AddressGateway {
create(
data: {
company?: string;
countryCodeAlpha2?: string;
countryCodeAlpha3?: string;
countryCodeNumeric?: string;
countryName?: string;
customerId: string;
extendedAddress?: string;
firstName?: string;
lastName?: string;
locality?: string;
postalCode?: string;
region?: string;
streetAddress?: string;
},
callback?: (err: Error, result: Address) => {}
): void;
delete(
customerId: string,
addressId: string,
callback?: deleteResponse
): void;
find(
customerId: string,
addressId: string,
callback?: (err: Error, result: Address) => {}
): void;
update(
customerId: string,
addressId: string,
data: {
company?: string;
countryCodeAlpha2?: string;
countryCodeAlpha3?: string;
countryCodeNumeric?: string;
countryName?: string;
extendedAddress?: string;
firstName?: string;
lastName?: string;
locality?: string;
postalCode?: string;
region?: string;
streetAddress?: string;
},
callback?: (err: Error, result: Address) => {}
): void;
}
export class ClientTokenGateway {
generate(
data: {
customerId?: string;
merchantAccountId?: string;
options?: {
failOnDuplicatePaymentMethod?: boolean;
makeDefault?: boolean;
verifyCard?: boolean;
}
version?: string;
},
callback?: (err: Error, result: { clientToken: string }) => {}
): void;
}
export class CreditCardVerificationGateway {
search(
search: (search: {
billingAddressDetailsProstalCode: any,
createdAt: any,
creditCardCardType: any,
creditCardCardHolderName: any,
creditCardExpirationDate: any,
creditCardNumber: any,
customerEmail: any,
customerId: any,
id: any,
ids: any,
paymentMethodToken: any
}) => {},
callback?: searchResponse<CreditCardVerification>
): void;
}
export class CustomerGateway {
create(
data: {
company?: string;
creditCard?: {
billingAddress?: {
company?: string;
countryCodeAlpha2?: string
countryCodeAlpha3?: string
countryCodeNumeric?: string;
countryName?: string;
extendedAddress?: string;
firstName?: string;
lastName?: string;
locality?: string;
options?: any; //TODO check if correct
postalCode?: string;
region?: string;
streetAddress?: string;
};
cardholderName?: string;
options?: {
failOnDuplicatePaymentMethod?: boolean;
makeDefault?: boolean;
verificationAcmount?: string;
verificationMerchantAccountId?: string;
verifyCard?: boolean;
};
token?: string;
};
customFields?: any;
deviceData?: string;
email?: string;
fax?: string;
firstName?: string;
id?: string;
lastName?: string;
paymentMethodNonce?: string;
phone?: string;
website?: string;
},
callback?: (
err: Error,
result: {
customer?: Customer;
verification?: CreditCardVerification;
message?: string;
success: boolean;
}
) => {}
): void;
delete(
customerId: string,
callback?: deleteResponse
): void;
find(
customerId: string,
callback?: (err: Error, customer: Customer) => {}
): void;
search(
search: (search: {
//TODO
}) => void,
callback?: searchResponse<Customer>
): void;
update(
id: string,
data: {
company?: string;
creditCard?: {
billingAddress?: {
company?: string;
countryCodeAlpha2?: string
countryCodeAlpha3?: string
countryCodeNumeric?: string;
countryName?: string;
extendedAddress?: string;
firstName?: string;
lastName?: string;
locality?: string;
options?: {
updateExisting?: boolean;
};
postalCode?: string;
region?: string;
streetAddress?: string;
};
billingAddressId?: string;
cardholderName?: string;
options?: {
failOnDuplicatePaymentMethod?: boolean;
makeDefault?: boolean;
updateExistingToken?: string;
verificationAcmount?: string;
verificationMerchantAccountId?: string;
verifyCard?: boolean;
};
token?: string;
};
customFields?: any;
deviceData?: string;
email?: string;
fax?: string;
firstName?: string;
id?: string;
lastName?: string;
paymentMethodNonce?: string;
phone?: string;
website?: string;
},
callback?: (err: Error, result: { customer: Customer }) => {}
): void;
}
export class DiscountGateway {
// `all` is not supported in the node library yet
}
export class MerchantAccountGateway {
create(
data: {
business?: {
address?: string | { //TODO check correct
locality?: string;
postalCode?: string;
region?: string;
streetAddress?: string;
};
dbaName?: string;
legalName?: string;
taxId?: string;
};
funding: {
accountNumber?: string;
descriptor?: string;
destination: string;
email?: string;
mobilePhone?: string;
routingNumber: string;
}
individual: {
address: string | { //TODO check correct
locality: string;
postalCode: string;
region: string;
streetAddress: string;
};
dateOfBirth: string;
email: string;
firstName: string;
lastName: string;
phone?: string;
ssn?: string;
};
merchantAccountId: string;
tosAccepted: boolean;
},
callback?: (err: Error, result: { merchantAccount: MerchantAccount }) => {} //TODO check correctness
): void;
find(
id: string,
callback?: (err: Error, merchantAccount: MerchantAccount) => {}
): void;
update(
id: string,
data: {
business?: {
address?: string | { //TODO check correct
locality?: string;
postalCode?: string;
region?: string;
streetAddress?: string;
};
dbaName?: string;
legalName?: string;
taxId?: string;
};
funding?: {
accountNumber?: string;
descriptor?: string;
destination: string;
email?: string;
mobilePhone?: string;
routingNumber: string;
}
individual?: {
address?: string | { //TODO check correct
locality?: string;
postalCode?: string;
region?: string;
streetAddress?: string;
};
dateOfBirth?: string;
email?: string;
firstName?: string;
lastName?: string;
phone?: string;
ssn?: string;
};
},
callback?: (
err: Error,
result: { success: boolean, merchantAccount: MerchantAccount }
) => {}
): void;
}
export class PaymentMethodGateway {
create(
data: {
billingAddress?: {
company?: string;
countryCodeAlpha2?: string
countryCodeAlpha3?: string
countryCodeNumeric?: string;
countryName?: string;
extendedAddress?: string;
firstName?: string;
lastName?: string;
locality?: string;
postalCode?: string;
region?: string;
streetAddress?: string;
};
billingAddressId?: string;
cardholderName: string;
customerId: string;
cvv?: string;
deviceData?: string;
expirationDate?: string;
expirationMonth?: string;
expirationYear?: string;
number?: string;
options?: {
failOnDuplicatePaymentMethod?: boolean;
makeDefault?: boolean;
verificationAcmount?: string;
verificationMerchantAccountId?: string;
verifyCard?: boolean;
};
paymentMethodNonce: string;
token?: string;
},
callback?: (
err: Error,
result: { success: boolean, paymentMethod: PaymentMethod } //TODO check correct
) => {}
): void;
delete(
token: string,
callback?: deleteResponse
): void;
find(
token: string,
callback?: (err: Error, paymentMethod: PaymentMethod) => {}
): void;
update(
token: string,
data: {
billingAddress?: {
company?: string;
countryCodeAlpha2?: string
countryCodeAlpha3?: string
countryCodeNumeric?: string;
countryName?: string;
extendedAddress?: string;
firstName?: string;
lastName?: string;
locality?: string;
options?: {
updateExisting?: boolean;
};
postalCode?: string;
region?: string;
streetAddress?: string;
};
billingAddressId?: string;
cardholderName?: string;
cvv?: string;
expirationDate?: string;
expirationMonth?: string;
expirationYear?: string;
number?: string;
options?: {
failOnDuplicatePaymentMethod?: boolean;
makeDefault?: boolean;
verificationAcmount?: string;
verificationMerchantAccountId?: string;
verifyCard?: boolean;
};
paymentMethodNonce?: string;
token?: string;
},
callback?: (err: Error, result: {/*TODO*/ }) => {}
): void;
}
export class PaymentMethodNonceGateway {
create(
paymentMethodToken: string,
callback?: (err: Error, response: { paymentMethodNonce: PaymentMethodNonce }) => {}
): void;
find(
paymentMethodNonce: string,
callback?: (err: Error, result: PaymentMethodNonce) => {}
): void;
}
export class PlanGateway {
all(callback?: (err: Error, result: {/*TODO*/ }) => {}): Plan[];
}
export class SettlementBatchSummaryGateway {
generate(
data: {
settlementDate: string,
groupByCustomField?: string
},
callback?: (err: Error, result: { settlementBatchSummary: SettlementBatchSummary }) => {}
): void;
}
export class SubscriptionGateway {
cancel(
subscriptionId: string,
callback?: (err: Error, result: {/*TODO*/ }) => {}
): void;
create(
data: {
addOns?: {
add?: {
amount?: string;
inheritedFromId: string;
neverExpires?: boolean;
numberOfBillingCycles?: string;
quantity?: any; //TODO get type
}[];
update: {
amount?: string;
existingId: string; //TODO check required
neverExpires?: boolean;
numberOfBillingCycles?: number;
quantity?: number;
}[];
remove: string[]
};
billingDayOfMonth?: number;
descriptor?: {
name?: string;
phone?: string;
url?: string;
};
discounts: {
add: {
amount?: string;
inheritedFromId: string;
neverExpires?: boolean;
numberOfBillingCycles?: string;
quantity?: number;
}[];
updade: {
amount?: string;
inheritedFromId?: string;
neverExpires?: boolean;
numberOfBillingCycles?: string;
quantity?: number;
}[];
remove: string[];
};
firstBillingDate?: Date;
id?: string;
merchantAccountId?: string;
neverExpires?: boolean;
numberOfBillingCycles?: number;
options?: {
doNotInheritAddOnsOrDiscounts?: boolean;
startImmediately?: boolean;
};
paymentMethodNonce?: string;
paymentMethodToken: string;
planId: string;
price?: string;
trialDuration?: number;
trialDurationUnit?: string;
trialPeriod?: boolean;
},
callback?: (err: Error, result: { subscription: Subscription }) => {}
): void;
find(
subscriptionId: string,
callback?: (err: Error, result: {/*TODO*/ }) => {}
): void;
retryCharge(
subscriptionId: string,
amount?: string,
callback?: (err: Error, result: {/*TODO*/ }) => {}
): void;
search(
search: (search: any) => {}, //TODO get search type
callback?: searchResponse<Subscription>
): any; //TODO get return stream type
update(
id: string,
data: {
addOns?: {
add?: {
amount?: string;
inheritedFromId: string;
neverExpires?: boolean;
numberOfBillingCycles?: string;
quantity?: number;
}[];
update: {
amount?: string;
existingId?: string;
neverExpires?: boolean;
numberOfBillingCycles?: number;
quantity?: number;
}[];
remove: string[]
};
descriptor?: {
name?: string;
phone?: string;
url?: string;
};
discounts: {
add: {
amount?: string;
inheritedFromId: string;
neverExpires?: boolean;
numberOfBillingCycles?: string;
quantity?: number;
}[];
updade: {
amount?: string;
inheritedFromId?: string;
neverExpires?: boolean;
numberOfBillingCycles?: string;
quantity?: number;
}[];
remove: string[];
};
id?: string;
merchantAccountId?: string;
neverExpires?: boolean;
numberOfBillingCycles?: number;
options?: {
prorateCharges: boolean;
replaceAllAddonsAndDiscounts?: boolean;
revertSubscriptionOnProrationFailure?: boolean;
};
paymentMethodToken?: string;
planId?: string;
price?: string;
},
callback?: (err: Error, result: {/*TODO*/ }) => {}
): void;
}
export class TransactionGateway {
cancelRelease(
transationId: string,
callback?: (err: Error, result: {/*TODO*/ }) => {}
): void;
cloneTransaction(
transactionId: string,
data?: {
amount: string;
options: {
submitForSettlement: boolean;
}
},
callback?: (err: Error, result: {/*TODO*/ }) => {}
): void;
find(
transationId: string,
callback?: (err: Error, transaction: Transaction) => {}
): void;
holdInEscrow(
transactionId: string,
callback?: (err: Error, result: {/*TODO*/ }) => {}
): void;
refund(
transactionId: string,
amount?: string,
callback?: (
err: Error,
result: { success: boolean, transaction: Transaction }
) => {}
): void;
releaseFromEscrow(
tansactionId: string,
callback?: (err: Error, result: {/*TODO*/ }) => {}
): void;
sale(
data: {
amount: string,
billingAddress?: {
company?: string;
countryCodeAlpha2?: string
countryCodeAlpha3?: string
countryCodeNumeric?: string;
countryName?: string;
extendedAddress?: string;
firstName?: string;
lastName?: string;
locality?: string;
postalCode?: string;
region?: string;
streetAddress?: string;
};
billingAddressId?: string;
channel?: string;
customFields?: any;
customer?: {
company?: string;
email?: string;
fax?: string;
firstName?: string;
id?: string;
lastName?: string;
phone?: string;
website?: string;
};
descriptor?: {
name?: string;
phone?: string;
url?: string;
};
deviceData?: string;
deviceSessionId?: string;
merchantAccountId?: string;
options?: {
addBillingAddressToPaymentMethod?: boolean;
holdInEscrow?: boolean;
paypal?: {
customField?: string;
description?: string;
};
storeInVault?: boolean;
storeInVaultOnSuccess?: boolean;
storeShippingAddressInVault?: boolean;
submitForSettlement?: boolean;
threeDSecure?: {
required: boolean;
};
};
orderId?: string;
paymentMethodNonce?: string;
paymentMethodToken?: string;
purchaseOrderNumber?: string;
recurring?: boolean;
serviceFeeAmount?: string;
shipping?: {
company?: string;
countryCodeAlpha2?: string
countryCodeAlpha3?: string
countryCodeNumeric?: string;
countryName?: string;
extendedAddress?: string;
firstName?: string;
lastName?: string;
locality?: string;
postalCode?: string;
region?: string;
streetAddress?: string;
},
shippingAddressId?: string;
taxAmount?: string;
taxExempt?: boolean;
},
callback?: (
err: Error,
result: { success: boolean, transaction: Transaction }
) => {}
): void;
search(
search: (search: any) => {}, //TODO get search type
callback?: searchResponse<Transaction>
): any; //TODO get return stream type
submitForSettlement(
transactionId: string,
callback?: (err: Error, result: {/*TODO*/ }) => {}
): void;
void(
transactionId: string,
callback?: (err: Error, result: { success: boolean, message?: string }) => {}
): void;
}
export class WebhookNotificationGateway {
parse(
signature: string,
payload: string,
callback: (err: Error, result: { kind: any, timestamp: any }) => {} //TODO get rest of types
): void;
}
}
declare module 'braintree' {
export default Braintree;
}
@TonyPythoneer

Copy link
Copy Markdown

Hello @stwiname,
It looks good. I appreciate your definition on gist. 👍
Why don't you send PR to DefinitelyTyped?

@kpitorg

kpitorg commented Sep 4, 2016

Copy link
Copy Markdown

Question - does this ts file work with ionic2 ? i am tying to import a braintree-web.js into .ts and running npm - getting a compile error. not able to create payment nonce. i have not tried your .ts code. please advise. Thanks

@kpitorg

kpitorg commented Sep 4, 2016

Copy link
Copy Markdown

@stwiname @TonyPythoneer - So I installed braintree using npm install braintree and it sits under node_modules directory now. There is no typescript file associated to it as it is a pure javascript library.
So not sure how do I import it like I import moment.js using statement: import moment = require('moment'); I found your braintree.d.ts file Do I have to include it somewhere? Is this file even relevant or I can use the braintree JS library directly. Is it even possible to use braintree with ionic2 at the moment? Sorry for so many questions, I am new to typescript and still trying to learn it. Thanks for your time.

@p-sebastian

Copy link
Copy Markdown

@kpitorg, did you find a solution? Im on the same boat as you with ionic 2

@ajxs

ajxs commented Oct 2, 2018

Copy link
Copy Markdown

Are you open to the idea of other devs developing this further and publishing it to DefinitelyTyped? I've included this in a project of my own, and this has saved me a lot of work. I'm ironing out a few creases I see.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment