Skip to content

Commit f9bd437

Browse files
committed
Fix Stripe.ErrorType.StripeError incorrectly being usable as a runtime class (#2758)
1 parent 00ed92b commit f9bd437

3 files changed

Lines changed: 218 additions & 2 deletions

File tree

src/stripe.core.ts

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2593,6 +2593,105 @@ export declare namespace Stripe {
25932593

25942594
export {StripeContext as StripeContextType};
25952595
export {StripeRawError};
2596-
export import ErrorType = _Error;
2596+
// ErrorTypeNamespaces: The beginning of the section generated from our OpenAPI spec
2597+
export namespace ErrorType {
2598+
export type StripeError = InstanceType<typeof _Error.StripeError>;
2599+
export type StripeCardError = InstanceType<typeof _Error.StripeCardError>;
2600+
export type StripeInvalidRequestError = InstanceType<
2601+
typeof _Error.StripeInvalidRequestError
2602+
>;
2603+
export type StripeAPIError = InstanceType<typeof _Error.StripeAPIError>;
2604+
export type StripeAuthenticationError = InstanceType<
2605+
typeof _Error.StripeAuthenticationError
2606+
>;
2607+
export type StripePermissionError = InstanceType<
2608+
typeof _Error.StripePermissionError
2609+
>;
2610+
export type StripeRateLimitError = InstanceType<
2611+
typeof _Error.StripeRateLimitError
2612+
>;
2613+
export type StripeConnectionError = InstanceType<
2614+
typeof _Error.StripeConnectionError
2615+
>;
2616+
export type StripeSignatureVerificationError = InstanceType<
2617+
typeof _Error.StripeSignatureVerificationError
2618+
>;
2619+
export type StripeIdempotencyError = InstanceType<
2620+
typeof _Error.StripeIdempotencyError
2621+
>;
2622+
export type StripeOAuthError = InstanceType<typeof _Error.StripeOAuthError>;
2623+
export type StripeInvalidGrantError = InstanceType<
2624+
typeof _Error.StripeInvalidGrantError
2625+
>;
2626+
export type StripeInvalidClientError = InstanceType<
2627+
typeof _Error.StripeInvalidClientError
2628+
>;
2629+
export type StripeOAuthInvalidRequestError = InstanceType<
2630+
typeof _Error.StripeOAuthInvalidRequestError
2631+
>;
2632+
export type StripeInvalidScopeError = InstanceType<
2633+
typeof _Error.StripeInvalidScopeError
2634+
>;
2635+
export type StripeUnsupportedGrantTypeError = InstanceType<
2636+
typeof _Error.StripeUnsupportedGrantTypeError
2637+
>;
2638+
export type StripeUnsupportedResponseTypeError = InstanceType<
2639+
typeof _Error.StripeUnsupportedResponseTypeError
2640+
>;
2641+
export type RateLimitError = InstanceType<typeof _Error.RateLimitError>;
2642+
export type TemporarySessionExpiredError = InstanceType<
2643+
typeof _Error.TemporarySessionExpiredError
2644+
>;
2645+
}
2646+
export namespace errors {
2647+
export type StripeError = InstanceType<typeof _Error.StripeError>;
2648+
export type StripeCardError = InstanceType<typeof _Error.StripeCardError>;
2649+
export type StripeInvalidRequestError = InstanceType<
2650+
typeof _Error.StripeInvalidRequestError
2651+
>;
2652+
export type StripeAPIError = InstanceType<typeof _Error.StripeAPIError>;
2653+
export type StripeAuthenticationError = InstanceType<
2654+
typeof _Error.StripeAuthenticationError
2655+
>;
2656+
export type StripePermissionError = InstanceType<
2657+
typeof _Error.StripePermissionError
2658+
>;
2659+
export type StripeRateLimitError = InstanceType<
2660+
typeof _Error.StripeRateLimitError
2661+
>;
2662+
export type StripeConnectionError = InstanceType<
2663+
typeof _Error.StripeConnectionError
2664+
>;
2665+
export type StripeSignatureVerificationError = InstanceType<
2666+
typeof _Error.StripeSignatureVerificationError
2667+
>;
2668+
export type StripeIdempotencyError = InstanceType<
2669+
typeof _Error.StripeIdempotencyError
2670+
>;
2671+
export type StripeOAuthError = InstanceType<typeof _Error.StripeOAuthError>;
2672+
export type StripeInvalidGrantError = InstanceType<
2673+
typeof _Error.StripeInvalidGrantError
2674+
>;
2675+
export type StripeInvalidClientError = InstanceType<
2676+
typeof _Error.StripeInvalidClientError
2677+
>;
2678+
export type StripeOAuthInvalidRequestError = InstanceType<
2679+
typeof _Error.StripeOAuthInvalidRequestError
2680+
>;
2681+
export type StripeInvalidScopeError = InstanceType<
2682+
typeof _Error.StripeInvalidScopeError
2683+
>;
2684+
export type StripeUnsupportedGrantTypeError = InstanceType<
2685+
typeof _Error.StripeUnsupportedGrantTypeError
2686+
>;
2687+
export type StripeUnsupportedResponseTypeError = InstanceType<
2688+
typeof _Error.StripeUnsupportedResponseTypeError
2689+
>;
2690+
export type RateLimitError = InstanceType<typeof _Error.RateLimitError>;
2691+
export type TemporarySessionExpiredError = InstanceType<
2692+
typeof _Error.TemporarySessionExpiredError
2693+
>;
2694+
}
2695+
// ErrorTypeNamespaces: The end of the section generated from our OpenAPI spec
25972696
export import Events = V2.Core.Events;
25982697
}

src/stripe.esm.node.ts

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2586,7 +2586,106 @@ export declare namespace Stripe {
25862586

25872587
export {StripeContext as StripeContextType};
25882588
export {StripeRawError};
2589-
export import ErrorType = _Error;
2589+
// ErrorTypeNamespaces: The beginning of the section generated from our OpenAPI spec
2590+
export namespace ErrorType {
2591+
export type StripeError = InstanceType<typeof _Error.StripeError>;
2592+
export type StripeCardError = InstanceType<typeof _Error.StripeCardError>;
2593+
export type StripeInvalidRequestError = InstanceType<
2594+
typeof _Error.StripeInvalidRequestError
2595+
>;
2596+
export type StripeAPIError = InstanceType<typeof _Error.StripeAPIError>;
2597+
export type StripeAuthenticationError = InstanceType<
2598+
typeof _Error.StripeAuthenticationError
2599+
>;
2600+
export type StripePermissionError = InstanceType<
2601+
typeof _Error.StripePermissionError
2602+
>;
2603+
export type StripeRateLimitError = InstanceType<
2604+
typeof _Error.StripeRateLimitError
2605+
>;
2606+
export type StripeConnectionError = InstanceType<
2607+
typeof _Error.StripeConnectionError
2608+
>;
2609+
export type StripeSignatureVerificationError = InstanceType<
2610+
typeof _Error.StripeSignatureVerificationError
2611+
>;
2612+
export type StripeIdempotencyError = InstanceType<
2613+
typeof _Error.StripeIdempotencyError
2614+
>;
2615+
export type StripeOAuthError = InstanceType<typeof _Error.StripeOAuthError>;
2616+
export type StripeInvalidGrantError = InstanceType<
2617+
typeof _Error.StripeInvalidGrantError
2618+
>;
2619+
export type StripeInvalidClientError = InstanceType<
2620+
typeof _Error.StripeInvalidClientError
2621+
>;
2622+
export type StripeOAuthInvalidRequestError = InstanceType<
2623+
typeof _Error.StripeOAuthInvalidRequestError
2624+
>;
2625+
export type StripeInvalidScopeError = InstanceType<
2626+
typeof _Error.StripeInvalidScopeError
2627+
>;
2628+
export type StripeUnsupportedGrantTypeError = InstanceType<
2629+
typeof _Error.StripeUnsupportedGrantTypeError
2630+
>;
2631+
export type StripeUnsupportedResponseTypeError = InstanceType<
2632+
typeof _Error.StripeUnsupportedResponseTypeError
2633+
>;
2634+
export type RateLimitError = InstanceType<typeof _Error.RateLimitError>;
2635+
export type TemporarySessionExpiredError = InstanceType<
2636+
typeof _Error.TemporarySessionExpiredError
2637+
>;
2638+
}
2639+
export namespace errors {
2640+
export type StripeError = InstanceType<typeof _Error.StripeError>;
2641+
export type StripeCardError = InstanceType<typeof _Error.StripeCardError>;
2642+
export type StripeInvalidRequestError = InstanceType<
2643+
typeof _Error.StripeInvalidRequestError
2644+
>;
2645+
export type StripeAPIError = InstanceType<typeof _Error.StripeAPIError>;
2646+
export type StripeAuthenticationError = InstanceType<
2647+
typeof _Error.StripeAuthenticationError
2648+
>;
2649+
export type StripePermissionError = InstanceType<
2650+
typeof _Error.StripePermissionError
2651+
>;
2652+
export type StripeRateLimitError = InstanceType<
2653+
typeof _Error.StripeRateLimitError
2654+
>;
2655+
export type StripeConnectionError = InstanceType<
2656+
typeof _Error.StripeConnectionError
2657+
>;
2658+
export type StripeSignatureVerificationError = InstanceType<
2659+
typeof _Error.StripeSignatureVerificationError
2660+
>;
2661+
export type StripeIdempotencyError = InstanceType<
2662+
typeof _Error.StripeIdempotencyError
2663+
>;
2664+
export type StripeOAuthError = InstanceType<typeof _Error.StripeOAuthError>;
2665+
export type StripeInvalidGrantError = InstanceType<
2666+
typeof _Error.StripeInvalidGrantError
2667+
>;
2668+
export type StripeInvalidClientError = InstanceType<
2669+
typeof _Error.StripeInvalidClientError
2670+
>;
2671+
export type StripeOAuthInvalidRequestError = InstanceType<
2672+
typeof _Error.StripeOAuthInvalidRequestError
2673+
>;
2674+
export type StripeInvalidScopeError = InstanceType<
2675+
typeof _Error.StripeInvalidScopeError
2676+
>;
2677+
export type StripeUnsupportedGrantTypeError = InstanceType<
2678+
typeof _Error.StripeUnsupportedGrantTypeError
2679+
>;
2680+
export type StripeUnsupportedResponseTypeError = InstanceType<
2681+
typeof _Error.StripeUnsupportedResponseTypeError
2682+
>;
2683+
export type RateLimitError = InstanceType<typeof _Error.RateLimitError>;
2684+
export type TemporarySessionExpiredError = InstanceType<
2685+
typeof _Error.TemporarySessionExpiredError
2686+
>;
2687+
}
2688+
// ErrorTypeNamespaces: The end of the section generated from our OpenAPI spec
25902689
export import Events = V2.Core.Events;
25912690
}
25922691

testProjects/types/typescriptTest.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,24 @@ const instanceofCheck2 = {} instanceof Stripe.errors.StripeAPIError;
271271
const instanceofCheck5 = {} instanceof stripe.errors.StripeError;
272272
const instanceofCheck6 = {} instanceof stripe.errors.StripeAPIError;
273273

274+
// ErrorType namespace provides type-level access (DEVSDK-3141)
275+
let errorTypeCheck1: Stripe.ErrorType.StripeError;
276+
let errorTypeCheck2: Stripe.ErrorType.StripeCardError;
277+
let errorTypeCheck3: Stripe.ErrorType.StripeInvalidRequestError;
278+
279+
// Stripe.errors and Stripe.ErrorType are interchangeable as types
280+
const errorTypeInterchangeable = (
281+
e: Stripe.errors.StripeError
282+
): Stripe.ErrorType.StripeError => e;
283+
284+
// instanceof narrows to the correct type
285+
const instanceofNarrowing = (e: unknown): Stripe.ErrorType.StripeError | null => {
286+
if (e instanceof Stripe.errors.StripeError) {
287+
return e;
288+
}
289+
return null;
290+
};
291+
274292
stripe.files.create({
275293
purpose: 'dispute_evidence',
276294
file: {

0 commit comments

Comments
 (0)