From 12469ce0d02889a15e91c5f519fbe9a47199fa52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Ga=C5=82uszka?= Date: Mon, 10 Jul 2017 11:49:10 +0200 Subject: [PATCH] [stripe] fix definitions files and tests --- types/stripe-v2/index.d.ts | 173 +++++++++++++++++++ types/stripe-v2/stripe-v2-tests.ts | 32 ++++ types/{stripe => stripe-v2}/tsconfig.json | 2 +- types/{stripe => stripe-v2}/tslint.json | 0 types/{stripe => stripe-v3}/index.d.ts | 18 +- types/stripe-v3/stripe-v3-tests.ts | 113 ++++++++++++ types/{stripe/v2 => stripe-v3}/tsconfig.json | 9 +- types/{stripe/v2 => stripe-v3}/tslint.json | 0 types/stripe/stripe-tests.ts | 39 ----- types/stripe/v2/index.d.ts | 170 ------------------ types/stripe/v2/stripe-tests.ts | 25 --- 11 files changed, 336 insertions(+), 245 deletions(-) create mode 100644 types/stripe-v2/index.d.ts create mode 100644 types/stripe-v2/stripe-v2-tests.ts rename types/{stripe => stripe-v2}/tsconfig.json (93%) rename types/{stripe => stripe-v2}/tslint.json (100%) rename types/{stripe => stripe-v3}/index.d.ts (93%) create mode 100644 types/stripe-v3/stripe-v3-tests.ts rename types/{stripe/v2 => stripe-v3}/tsconfig.json (73%) rename types/{stripe/v2 => stripe-v3}/tslint.json (100%) delete mode 100644 types/stripe/stripe-tests.ts delete mode 100644 types/stripe/v2/index.d.ts delete mode 100644 types/stripe/v2/stripe-tests.ts diff --git a/types/stripe-v2/index.d.ts b/types/stripe-v2/index.d.ts new file mode 100644 index 0000000000..563fb89780 --- /dev/null +++ b/types/stripe-v2/index.d.ts @@ -0,0 +1,173 @@ +// Type definitions for stripe-v2 2.x +// Project: https://stripe.com/ +// Definitions by: Andy Hawkins +// Eric J. Smith +// Amrit Kahlon +// Adam Cmiel +// Justin Leider +// Kamil Gałuszka +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare var Stripe: stripe.StripeStatic; + +declare namespace stripe { + interface StripeStatic { + applePay: StripeApplePay; + setPublishableKey(key: string): void; + validateCardNumber(cardNumber: string): boolean; + validateExpiry(month: string, year: string): boolean; + validateCVC(cardCVC: string): boolean; + cardType(cardNumber: string): StripeCardDataBrand; + getToken(token: string, responseHandler: (status: number, response: StripeCardTokenResponse) => void): void; + card: StripeCard; + createToken(data: StripeCardTokenData, responseHandler: (status: number, response: StripeCardTokenResponse) => void): void; + bankAccount: StripeBankAccount; + } + + interface StripeCardTokenData { + number: string; + exp_month?: number; + exp_year?: number; + exp?: string; + cvc?: string; + name?: string; + address_line1?: string; + address_line2?: string; + address_city?: string; + address_state?: string; + address_zip?: string; + address_country?: string; + } + + interface StripeTokenResponse { + id: string; + client_ip: string; + created: number; + livemode: boolean; + object: string; + type: string; + used: boolean; + error?: StripeError; + } + + interface StripeCardTokenResponse extends StripeTokenResponse { + card: StripeCard; + } + + interface StripeError { + type: string; + code: string; + message: string; + param?: string; + } + + type StripeCardDataBrand = 'Visa' | 'American Express' | 'MasterCard' | 'Discover' | 'JCB' | 'Diners Club' | 'Unknown'; + + type StripeCardDataFunding = 'credit' | 'debit' | 'prepaid' | 'unknown'; + + interface StripeCard { + object: string; + last4: string; + exp_month: number; + exp_year: number; + country?: string; + name?: string; + address_line1?: string; + address_line2?: string; + address_city?: string; + address_state?: string; + address_zip?: string; + address_country?: string; + brand?: StripeCardDataBrand; + funding?: StripeCardDataFunding; + createToken(data: StripeCardTokenData, responseHandler: (status: number, response: StripeCardTokenResponse) => void): void; + validateCardNumber(cardNumber: string): boolean; + validateExpiry(month: string, year: string): boolean; + validateCVC(cardCVC: string): boolean; + } + + interface StripeBankAccount { + createToken(params: StripeBankTokenParams, stripeResponseHandler: (status: number, response: StripeBankTokenResponse) => void): void; + validateRoutingNumber(routingNumber: number | string, countryCode: string): boolean; + validateAccountNumber(accountNumber: number | string, countryCode: string): boolean; + } + + interface StripeBankTokenParams { + country: string; + currency: string; + account_number: number | string; + routing_number?: number | string; + account_holder_name: string; + account_holder_type: string; + } + + interface StripeBankTokenResponse extends StripeTokenResponse { + bank_account: { + country: string; + bank_name: string; + last4: number; + validated: boolean; + object: string; + }; + } + + interface StripeApplePay { + checkAvailability(resopnseHandler: (result: boolean) => void): void; + buildSession(data: StripeApplePayPaymentRequest, + onSuccessHandler: (result: StripeApplePaySessionResult, completion: ((value: any) => void)) => void, + onErrorHanlder: (error: { message: string }) => void): any; + } + + type StripeApplePayBillingContactField = 'postalAddress' | 'name'; + type StripeApplePayShippingContactField = StripeApplePayBillingContactField | 'phone' | 'email'; + type StripeApplePayShipping = 'shipping' | 'delivery' | 'storePickup' | 'servicePickup'; + + interface StripeApplePayPaymentRequest { + billingContact: StripeApplePayPaymentContact; + countryCode: string; + currencyCode: string; + total: StripeApplePayLineItem; + lineItems?: StripeApplePayLineItem[]; + requiredBillingContactFields?: StripeApplePayBillingContactField[]; + requiredShippingContactFields?: StripeApplePayShippingContactField[]; + shippingContact?: StripeApplePayPaymentContact; + shippingMethods?: StripeApplePayShippingMethod[]; + shippingType?: StripeApplePayShipping[]; + } + + // https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types + interface StripeApplePayLineItem { + type: 'pending' | 'final'; + label: string; + amount: number; + } + + interface StripeApplePaySessionResult { + token: StripeCardTokenResponse; + shippingContact?: StripeApplePayPaymentContact; + shippingMethod?: StripeApplePayShippingMethod; + } + + interface StripeApplePayShippingMethod { + label: string; + detail: string; + amount: number; + identifier: string; + } + + interface StripeApplePayPaymentContact { + emailAddress: string; + phoneNumber: string; + givenName: string; + familyName: string; + addressLines: string[]; + locality: string; + administrativeArea: string; + postalCode: string; + countryCode: string; + } +} + +// The Stripe client side APIs are not made available to package managers for direct installation. +// As explained compliance reasons. Source: https://github.com/stripe/stripe-node/blob/master/README.md#these-are-serverside-bindings-only +// A release date versioning schema is used to version these APIs. diff --git a/types/stripe-v2/stripe-v2-tests.ts b/types/stripe-v2/stripe-v2-tests.ts new file mode 100644 index 0000000000..936d311f53 --- /dev/null +++ b/types/stripe-v2/stripe-v2-tests.ts @@ -0,0 +1,32 @@ +declare function describe(desc: string, fn: () => void): void; +declare function it(desc: string, fn: () => void): void; + +describe("Stripe", () => { + it("should excercise Stripe API", () => { + function success(card: stripe.StripeCard) { + console.log(card.brand && card.brand.toString()); + } + + const cardNumber = '4242424242424242'; + + const isValid = Stripe.validateCardNumber(cardNumber); + if (isValid) { + const tokenData: stripe.StripeCardTokenData = { + number: cardNumber, + exp_month: 1, + exp_year: 2100, + cvc: '111' + }; + Stripe.card.createToken(tokenData, (status, response) => { + if (response.error) { + console.error(response.error.message); + if (response.error.param) { + console.error(response.error.param); + } + } else { + success(response.card); + } + }); + } + }); +}); diff --git a/types/stripe/tsconfig.json b/types/stripe-v2/tsconfig.json similarity index 93% rename from types/stripe/tsconfig.json rename to types/stripe-v2/tsconfig.json index c15aeceae9..a40e816e5a 100644 --- a/types/stripe/tsconfig.json +++ b/types/stripe-v2/tsconfig.json @@ -18,6 +18,6 @@ }, "files": [ "index.d.ts", - "stripe-tests.ts" + "stripe-v2-tests.ts" ] } diff --git a/types/stripe/tslint.json b/types/stripe-v2/tslint.json similarity index 100% rename from types/stripe/tslint.json rename to types/stripe-v2/tslint.json diff --git a/types/stripe/index.d.ts b/types/stripe-v3/index.d.ts similarity index 93% rename from types/stripe/index.d.ts rename to types/stripe-v3/index.d.ts index f58d5e602f..2337e6adc2 100644 --- a/types/stripe/index.d.ts +++ b/types/stripe-v3/index.d.ts @@ -1,20 +1,30 @@ -// Type definitions for stripe 3.0 +// Type definitions for stripe-v3 3.0 // Project: https://stripe.com/ // Definitions by: Andy Hawkins // Eric J. Smith // Amrit Kahlon // Adam Cmiel // Justin Leider +// Kamil Gałuszka // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -export function Stripe(stripePublicKey: string): stripe.StripeStatic; +declare var Stripe: stripe.StripeStatic; -export namespace stripe { +declare namespace stripe { interface StripeStatic { + (publicKey: string): Stripe; + version: number; + } + + interface Stripe { elements(options?: elements.ElementsCreateOptions): elements.Elements; createToken(element: elements.Element, options?: TokenOptions): Promise; } + interface StripeOptions { + stripeAccount: string; + } + interface TokenOptions { name?: string; address_line1?: string; @@ -153,7 +163,7 @@ export namespace stripe { empty?: Style; invalid?: Style; }; - value?: string | {[objectKey: string]: string; }; + value?: string | { [objectKey: string]: string; }; } interface Style extends StyleOptions { diff --git a/types/stripe-v3/stripe-v3-tests.ts b/types/stripe-v3/stripe-v3-tests.ts new file mode 100644 index 0000000000..acf878d945 --- /dev/null +++ b/types/stripe-v3/stripe-v3-tests.ts @@ -0,0 +1,113 @@ +/// + +declare function describe(desc: string, fn: () => void): void; +declare function it(desc: string, fn: () => void): void; + +describe("Stripe", () => { + it("should excercise all Stripe API", () => { + const stripe = Stripe('public-key'); + const elements = stripe.elements(); + const style = { + base: { + color: '#32325d', + lineHeight: '24px', + fontFamily: 'Roboto, "Helvetica Neue", sans-serif', + fontSmoothing: 'antialiased', + fontSize: '16px', + '::placeholder': { + color: '#aab7c4' + } + }, + invalid: { + color: '#B71C1C', + iconColor: '#B71C1C' + } + }; + const card = elements.create('card', { hidePostalCode: true, style }); + card.mount(document.createElement('div')); + card.on('ready', () => { + console.log('ready'); + }); + card.on('change', (resp: stripe.elements.ElementChangeResponse) => { + console.log(resp.brand); + }); + stripe.createToken(card, { + name: 'Jimmy', + address_city: 'Toronto', + address_country: 'Canada' + }) + .then((result: stripe.TokenResponse) => { + console.log(result.token); + }, + (error: stripe.Error) => { + console.error(error); + }); + }); +}); + +describe("Stripe v2 & v3", () => { + it("should excercise all Stripe API", () => { + function success(card: stripe.StripeCard) { + console.log(card.brand && card.brand.toString()); + } + + const cardNumber = '4242424242424242'; + + const isValid = Stripe.validateCardNumber(cardNumber); + if (isValid) { + const tokenData: stripe.StripeCardTokenData = { + number: cardNumber, + exp_month: 1, + exp_year: 2100, + cvc: '111' + }; + Stripe.card.createToken(tokenData, (status, response) => { + if (response.error) { + console.error(response.error.message); + if (response.error.param) { + console.error(response.error.param); + } + } else { + success(response.card); + } + }); + } + const stripe = Stripe('public-key'); + const elements = stripe.elements(); + const style = { + base: { + color: '#32325d', + lineHeight: '24px', + fontFamily: 'Roboto, "Helvetica Neue", sans-serif', + fontSmoothing: 'antialiased', + fontSize: '16px', + '::placeholder': { + color: '#aab7c4' + } + }, + invalid: { + color: '#B71C1C', + iconColor: '#B71C1C' + } + }; + const card = elements.create('card', { hidePostalCode: true, style }); + card.mount(document.createElement('div')); + card.on('ready', () => { + console.log('ready'); + }); + card.on('change', (resp: stripe.elements.ElementChangeResponse) => { + console.log(resp.brand); + }); + stripe.createToken(card, { + name: 'Jimmy', + address_city: 'Toronto', + address_country: 'Canada' + }) + .then((result: stripe.TokenResponse) => { + console.log(result.token); + }, + (error: stripe.Error) => { + console.error(error); + }); + }); +}); diff --git a/types/stripe/v2/tsconfig.json b/types/stripe-v3/tsconfig.json similarity index 73% rename from types/stripe/v2/tsconfig.json rename to types/stripe-v3/tsconfig.json index 5917b8206d..4740cec2c1 100644 --- a/types/stripe/v2/tsconfig.json +++ b/types/stripe-v3/tsconfig.json @@ -8,19 +8,16 @@ "noImplicitAny": true, "noImplicitThis": true, "strictNullChecks": true, - "baseUrl": "../../", + "baseUrl": "../", "typeRoots": [ - "../../" + "../" ], "types": [], - "paths": { - "stripe": ["stripe/v2"] - }, "noEmit": true, "forceConsistentCasingInFileNames": true }, "files": [ "index.d.ts", - "stripe-tests.ts" + "stripe-v3-tests.ts" ] } diff --git a/types/stripe/v2/tslint.json b/types/stripe-v3/tslint.json similarity index 100% rename from types/stripe/v2/tslint.json rename to types/stripe-v3/tslint.json diff --git a/types/stripe/stripe-tests.ts b/types/stripe/stripe-tests.ts deleted file mode 100644 index f777c0eb34..0000000000 --- a/types/stripe/stripe-tests.ts +++ /dev/null @@ -1,39 +0,0 @@ -import {stripe, Stripe} from 'stripe'; - -const stripe = Stripe('public-key'); -const elements = stripe.elements(); -const style = { - base: { - color: '#32325d', - lineHeight: '24px', - fontFamily: 'Roboto, "Helvetica Neue", sans-serif', - fontSmoothing: 'antialiased', - fontSize: '16px', - '::placeholder': { - color: '#aab7c4' - } - }, - invalid: { - color: '#B71C1C', - iconColor: '#B71C1C' - } -}; -const card = elements.create('card', {hidePostalCode: true, style}); -card.mount(document.createElement('div')); -card.on('ready', () => { - console.log('ready'); -}); -card.on('change', (resp: stripe.elements.ElementChangeResponse) => { - console.log(resp.brand); -}); -stripe.createToken(card, { - name: 'Jimmy', - address_city: 'Toronto', - address_country: 'Canada' -}) -.then((result: stripe.TokenResponse) => { - console.log(result.token); -}, -(error: stripe.Error) => { - console.error(error); -}); diff --git a/types/stripe/v2/index.d.ts b/types/stripe/v2/index.d.ts deleted file mode 100644 index cc486b5d5b..0000000000 --- a/types/stripe/v2/index.d.ts +++ /dev/null @@ -1,170 +0,0 @@ -// Type definitions for stripe 2.x -// Project: https://stripe.com/ -// Definitions by: Andy Hawkins -// Eric J. Smith -// Amrit Kahlon -// Adam Cmiel -// Justin Leider -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -declare const Stripe: StripeStatic; - -interface StripeStatic { - applePay: StripeApplePay; - setPublishableKey(key: string): void; - validateCardNumber(cardNumber: string): boolean; - validateExpiry(month: string, year: string): boolean; - validateCVC(cardCVC: string): boolean; - cardType(cardNumber: string): StripeCardDataBrand; - getToken(token: string, responseHandler: (status: number, response: StripeCardTokenResponse) => void): void; - card: StripeCard; - createToken(data: StripeCardTokenData, responseHandler: (status: number, response: StripeCardTokenResponse) => void): void; - bankAccount: StripeBankAccount; -} - -interface StripeCardTokenData { - number: string; - exp_month?: number; - exp_year?: number; - exp?: string; - cvc?: string; - name?: string; - address_line1?: string; - address_line2?: string; - address_city?: string; - address_state?: string; - address_zip?: string; - address_country?: string; -} - -interface StripeTokenResponse { - id: string; - client_ip: string; - created: number; - livemode: boolean; - object: string; - type: string; - used: boolean; - error?: StripeError; -} - -interface StripeCardTokenResponse extends StripeTokenResponse { - card: StripeCard; -} - -interface StripeError { - type: string; - code: string; - message: string; - param?: string; -} - -type StripeCardDataBrand = 'Visa' | 'American Express' | 'MasterCard' | 'Discover' | 'JCB' | 'Diners Club' | 'Unknown'; - -type StripeCardDataFunding = 'credit' | 'debit' | 'prepaid' | 'unknown'; - -interface StripeCard { - object: string; - last4: string; - exp_month: number; - exp_year: number; - country?: string; - name?: string; - address_line1?: string; - address_line2?: string; - address_city?: string; - address_state?: string; - address_zip?: string; - address_country?: string; - brand?: StripeCardDataBrand; - funding?: StripeCardDataFunding; - createToken(data: StripeCardTokenData, responseHandler: (status: number, response: StripeCardTokenResponse) => void): void; - validateCardNumber(cardNumber: string): boolean; - validateExpiry(month: string, year: string): boolean; - validateCVC(cardCVC: string): boolean; -} - -interface StripeBankAccount { - createToken(params: StripeBankTokenParams, stripeResponseHandler: (status: number, response: StripeBankTokenResponse) => void): void; - validateRoutingNumber(routingNumber: number | string, countryCode: string): boolean; - validateAccountNumber(accountNumber: number | string, countryCode: string): boolean; -} - -interface StripeBankTokenParams { - country: string; - currency: string; - account_number: number | string; - routing_number?: number | string; - account_holder_name: string; - account_holder_type: string; -} - -interface StripeBankTokenResponse extends StripeTokenResponse { - bank_account: { - country: string; - bank_name: string; - last4: number; - validated: boolean; - object: string; - }; -} - -interface StripeApplePay { - checkAvailability(resopnseHandler: (result: boolean) => void): void; - buildSession(data: StripeApplePayPaymentRequest, - onSuccessHandler: (result: StripeApplePaySessionResult, completion: ((value: any) => void)) => void, - onErrorHanlder: (error: { message: string }) => void): any; -} - -type StripeApplePayBillingContactField = 'postalAddress' | 'name'; -type StripeApplePayShippingContactField = StripeApplePayBillingContactField | 'phone' | 'email'; -type StripeApplePayShipping = 'shipping' | 'delivery' | 'storePickup' | 'servicePickup'; - -interface StripeApplePayPaymentRequest { - billingContact: StripeApplePayPaymentContact; - countryCode: string; - currencyCode: string; - total: StripeApplePayLineItem; - lineItems?: StripeApplePayLineItem[]; - requiredBillingContactFields?: StripeApplePayBillingContactField[]; - requiredShippingContactFields?: StripeApplePayShippingContactField[]; - shippingContact?: StripeApplePayPaymentContact; - shippingMethods?: StripeApplePayShippingMethod[]; - shippingType?: StripeApplePayShipping[]; -} - -// https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types -interface StripeApplePayLineItem { - type: 'pending' | 'final'; - label: string; - amount: number; -} - -interface StripeApplePaySessionResult { - token: StripeCardTokenResponse; - shippingContact?: StripeApplePayPaymentContact; - shippingMethod?: StripeApplePayShippingMethod; -} - -interface StripeApplePayShippingMethod { - label: string; - detail: string; - amount: number; - identifier: string; -} - -interface StripeApplePayPaymentContact { - emailAddress: string; - phoneNumber: string; - givenName: string; - familyName: string; - addressLines: string[]; - locality: string; - administrativeArea: string; - postalCode: string; - countryCode: string; -} - -// The Stripe client side APIs are not made available to package managers for direct installation. -// As explained compliance reasons. Source: https://github.com/stripe/stripe-node/blob/master/README.md#these-are-serverside-bindings-only -// A release date versioning schema is used to version these APIs. diff --git a/types/stripe/v2/stripe-tests.ts b/types/stripe/v2/stripe-tests.ts deleted file mode 100644 index 56e6343f5c..0000000000 --- a/types/stripe/v2/stripe-tests.ts +++ /dev/null @@ -1,25 +0,0 @@ -function success(card: StripeCard) { - console.log(card.brand && card.brand.toString()); -} - -const cardNumber = '4242424242424242'; - -const isValid = Stripe.validateCardNumber(cardNumber); -if (isValid) { - const tokenData: StripeCardTokenData = { - number: cardNumber, - exp_month: 1, - exp_year: 2100, - cvc: '111' - }; - Stripe.card.createToken(tokenData, (status, response) => { - if (response.error) { - console.error(response.error.message); - if (response.error.param) { - console.error(response.error.param); - } - } else { - success(response.card); - } - }); -}