fix(payment): expose provider type for named gateways

This commit is contained in:
Clintchiz committed 2026-08-28 10:02:42 +05:30
1 parent 2e770f7e3e
commit 1b470402c7
5 files changed
+8 -1

No files matched your search

+3 -1
View File
@@ -50,6 +50,8 @@ export function validatePaymentConfig(config: PaymentConfig) {
});
if (value.provider === "razorpay")
required(name, { keyId: value.keyId, keySecret: value.keySecret });
if (value.provider === "razorpay" && config.environment === "production")
required(name, { webhookSecret: value.webhookSecret });
if (value.provider === "paypal")
required(name, {
clientId: value.clientId,
@@ -64,7 +66,7 @@ export function validatePaymentConfig(config: PaymentConfig) {
}
function namedGateway(name: string, gateway: PaymentGateway): PaymentGateway {
return Object.freeze({ ...gateway, id: name });
return Object.freeze({ ...gateway, id: name, provider: gateway.provider ?? gateway.id });
}
export function paymentOptionsFromConfig(
+1
View File
@@ -419,6 +419,7 @@ export function definePayment(options: PaymentOptions) {
providers: () =>
[...adapters.values()].map((adapter) => ({
id: adapter.id,
provider: adapter.provider ?? adapter.id,
capabilities: adapter.capabilities,
supports: adapter.supports,
})),
+2
View File
@@ -82,6 +82,8 @@ export interface WebhookEvent {
export interface PaymentGateway<TConfig = unknown> {
readonly id: string;
/** Built-in provider type when the id is an application-defined gateway alias. */
readonly provider?: string;
readonly config?: TConfig;
readonly capabilities: GatewayCapabilities;
readonly supports: GatewaySupport;
+1
View File
@@ -28,6 +28,7 @@ test("configuration creates any number of named provider gateways", () => {
expect(options.default).toBe("india");
expect(options.adapters.map((adapter) => adapter.id)).toEqual(["india", "global"]);
expect(options.adapters.map((adapter) => adapter.provider)).toEqual(["razorpay", "stripe"]);
expect(options.webhookSecrets).toEqual({ india: "razorpay-hook", global: "stripe-hook" });
});
@@ -27,6 +27,7 @@ test("package APIs use server subjects and never expose gateway secrets", async
const providerBody = await providers.text();
expect(providers.status).toBe(200);
expect(providerBody).toContain("testGateway");
expect(providerBody).toContain('"provider":"sandbox"');
expect(providerBody).not.toContain("server-only");
const denied = await POST({