-
Notifications
You must be signed in to change notification settings - Fork 764
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
668f1a3
commit 34a9e54
Showing
121 changed files
with
6,422 additions
and
58 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,2 @@ | ||
*.node*.js | ||
node_modules | ||
lib | ||
node_modules |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,4 +4,3 @@ tags | |
.nyc_output | ||
coverage | ||
.idea | ||
lib |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
v189 | ||
v188 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
10.8.0 | ||
10.7.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
'use strict'; | ||
|
||
/** | ||
* StripeError is the base error from which all other more specific Stripe errors derive. | ||
* Specifically for errors returned from Stripe's REST API. | ||
*/ | ||
class StripeError extends Error { | ||
constructor(raw = {}) { | ||
super(raw.message); | ||
this.type = this.constructor.name; | ||
|
||
this.raw = raw; | ||
this.rawType = raw.type; | ||
this.code = raw.code; | ||
this.doc_url = raw.doc_url; | ||
this.param = raw.param; | ||
this.detail = raw.detail; | ||
this.headers = raw.headers; | ||
this.requestId = raw.requestId; | ||
this.statusCode = raw.statusCode; | ||
this.message = raw.message; | ||
|
||
this.charge = raw.charge; | ||
this.decline_code = raw.decline_code; | ||
this.payment_intent = raw.payment_intent; | ||
this.payment_method = raw.payment_method; | ||
this.payment_method_type = raw.payment_method_type; | ||
this.setup_intent = raw.setup_intent; | ||
this.source = raw.source; | ||
} | ||
|
||
/** | ||
* Helper factory which takes raw stripe errors and outputs wrapping instances | ||
*/ | ||
static generate(rawStripeError) { | ||
switch (rawStripeError.type) { | ||
case 'card_error': | ||
return new StripeCardError(rawStripeError); | ||
case 'invalid_request_error': | ||
return new StripeInvalidRequestError(rawStripeError); | ||
case 'api_error': | ||
return new StripeAPIError(rawStripeError); | ||
case 'authentication_error': | ||
return new StripeAuthenticationError(rawStripeError); | ||
case 'rate_limit_error': | ||
return new StripeRateLimitError(rawStripeError); | ||
case 'idempotency_error': | ||
return new StripeIdempotencyError(rawStripeError); | ||
case 'invalid_grant': | ||
return new StripeInvalidGrantError(rawStripeError); | ||
default: | ||
return new StripeUnknownError(rawStripeError); | ||
} | ||
} | ||
} | ||
|
||
// Specific Stripe Error types: | ||
|
||
/** | ||
* CardError is raised when a user enters a card that can't be charged for | ||
* some reason. | ||
*/ | ||
class StripeCardError extends StripeError {} | ||
|
||
/** | ||
* InvalidRequestError is raised when a request is initiated with invalid | ||
* parameters. | ||
*/ | ||
class StripeInvalidRequestError extends StripeError {} | ||
|
||
/** | ||
* APIError is a generic error that may be raised in cases where none of the | ||
* other named errors cover the problem. It could also be raised in the case | ||
* that a new error has been introduced in the API, but this version of the | ||
* Node.JS SDK doesn't know how to handle it. | ||
*/ | ||
class StripeAPIError extends StripeError {} | ||
|
||
/** | ||
* AuthenticationError is raised when invalid credentials are used to connect | ||
* to Stripe's servers. | ||
*/ | ||
class StripeAuthenticationError extends StripeError {} | ||
|
||
/** | ||
* PermissionError is raised in cases where access was attempted on a resource | ||
* that wasn't allowed. | ||
*/ | ||
class StripePermissionError extends StripeError {} | ||
|
||
/** | ||
* RateLimitError is raised in cases where an account is putting too much load | ||
* on Stripe's API servers (usually by performing too many requests). Please | ||
* back off on request rate. | ||
*/ | ||
class StripeRateLimitError extends StripeError {} | ||
|
||
/** | ||
* StripeConnectionError is raised in the event that the SDK can't connect to | ||
* Stripe's servers. That can be for a variety of different reasons from a | ||
* downed network to a bad TLS certificate. | ||
*/ | ||
class StripeConnectionError extends StripeError {} | ||
|
||
/** | ||
* SignatureVerificationError is raised when the signature verification for a | ||
* webhook fails | ||
*/ | ||
class StripeSignatureVerificationError extends StripeError {} | ||
|
||
/** | ||
* IdempotencyError is raised in cases where an idempotency key was used | ||
* improperly. | ||
*/ | ||
class StripeIdempotencyError extends StripeError {} | ||
|
||
/** | ||
* InvalidGrantError is raised when a specified code doesn't exist, is | ||
* expired, has been used, or doesn't belong to you; a refresh token doesn't | ||
* exist, or doesn't belong to you; or if an API key's mode (live or test) | ||
* doesn't match the mode of a code or refresh token. | ||
*/ | ||
class StripeInvalidGrantError extends StripeError {} | ||
|
||
/** | ||
* Any other error from Stripe not specifically captured above | ||
*/ | ||
class StripeUnknownError extends StripeError {} | ||
|
||
module.exports.generate = StripeError.generate; | ||
module.exports.StripeError = StripeError; | ||
module.exports.StripeCardError = StripeCardError; | ||
module.exports.StripeInvalidRequestError = StripeInvalidRequestError; | ||
module.exports.StripeAPIError = StripeAPIError; | ||
module.exports.StripeAuthenticationError = StripeAuthenticationError; | ||
module.exports.StripePermissionError = StripePermissionError; | ||
module.exports.StripeRateLimitError = StripeRateLimitError; | ||
module.exports.StripeConnectionError = StripeConnectionError; | ||
module.exports.StripeSignatureVerificationError = StripeSignatureVerificationError; | ||
module.exports.StripeIdempotencyError = StripeIdempotencyError; | ||
module.exports.StripeInvalidGrantError = StripeInvalidGrantError; | ||
module.exports.StripeUnknownError = StripeUnknownError; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
'use strict'; | ||
|
||
// ResourceNamespace allows you to create nested resources, i.e. `stripe.issuing.cards`. | ||
// It also works recursively, so you could do i.e. `stripe.billing.invoicing.pay`. | ||
|
||
function ResourceNamespace(stripe, resources) { | ||
for (const name in resources) { | ||
const camelCaseName = name[0].toLowerCase() + name.substring(1); | ||
|
||
const resource = new resources[name](stripe); | ||
|
||
this[camelCaseName] = resource; | ||
} | ||
} | ||
|
||
module.exports = function(namespace, resources) { | ||
return function(stripe) { | ||
return new ResourceNamespace(stripe, resources); | ||
}; | ||
}; | ||
|
||
module.exports.ResourceNamespace = ResourceNamespace; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
'use strict'; | ||
|
||
const stripeMethod = require('./StripeMethod'); | ||
|
||
// DEPRECATED: These were kept for backwards compatibility in case users were | ||
// using this, but basic methods are now explicitly defined on a resource. | ||
module.exports = { | ||
create: stripeMethod({ | ||
method: 'POST', | ||
}), | ||
|
||
list: stripeMethod({ | ||
method: 'GET', | ||
methodType: 'list', | ||
}), | ||
|
||
retrieve: stripeMethod({ | ||
method: 'GET', | ||
path: '/{id}', | ||
}), | ||
|
||
update: stripeMethod({ | ||
method: 'POST', | ||
path: '{id}', | ||
}), | ||
|
||
// Avoid 'delete' keyword in JS | ||
del: stripeMethod({ | ||
method: 'DELETE', | ||
path: '{id}', | ||
}), | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
'use strict'; | ||
|
||
const utils = require('./utils'); | ||
const makeRequest = require('./makeRequest'); | ||
const makeAutoPaginationMethods = require('./autoPagination') | ||
.makeAutoPaginationMethods; | ||
|
||
/** | ||
* Create an API method from the declared spec. | ||
* | ||
* @param [spec.method='GET'] Request Method (POST, GET, DELETE, PUT) | ||
* @param [spec.path=''] Path to be appended to the API BASE_PATH, joined with | ||
* the instance's path (e.g. 'charges' or 'customers') | ||
* @param [spec.fullPath=''] Fully qualified path to the method (eg. /v1/a/b/c). | ||
* If this is specified, path should not be specified. | ||
* @param [spec.urlParams=[]] Array of required arguments in the order that they | ||
* must be passed by the consumer of the API. Subsequent optional arguments are | ||
* optionally passed through a hash (Object) as the penultimate argument | ||
* (preceding the also-optional callback argument | ||
* @param [spec.encode] Function for mutating input parameters to a method. | ||
* Usefully for applying transforms to data on a per-method basis. | ||
* @param [spec.host] Hostname for the request. | ||
*/ | ||
function stripeMethod(spec) { | ||
if (spec.path !== undefined && spec.fullPath !== undefined) { | ||
throw new Error( | ||
`Method spec specified both a 'path' (${spec.path}) and a 'fullPath' (${spec.fullPath}).` | ||
); | ||
} | ||
return function(...args) { | ||
const callback = typeof args[args.length - 1] == 'function' && args.pop(); | ||
|
||
spec.urlParams = utils.extractUrlParams( | ||
spec.fullPath || this.createResourcePathWithSymbols(spec.path || '') | ||
); | ||
|
||
const requestPromise = utils.callbackifyPromiseWithTimeout( | ||
makeRequest(this, args, spec, {}), | ||
callback | ||
); | ||
|
||
// Please note `spec.methodType === 'search'` is beta functionality and this | ||
// interface is subject to change/removal at any time. | ||
if (spec.methodType === 'list' || spec.methodType === 'search') { | ||
const autoPaginationMethods = makeAutoPaginationMethods( | ||
this, | ||
args, | ||
spec, | ||
requestPromise | ||
); | ||
Object.assign(requestPromise, autoPaginationMethods); | ||
} | ||
|
||
return requestPromise; | ||
}; | ||
} | ||
|
||
module.exports = stripeMethod; |
Oops, something went wrong.