From eaf54ae893d565e503b75ec2ef5f08390a2604d6 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Fri, 19 Sep 2025 11:10:18 +0000 Subject: [PATCH] feat: add test provider config endpoint Add GET /api/payload-billing/test/config endpoint to retrieve test provider configuration including scenarios, payment methods, and test mode indicators. This allows custom UIs to dynamically sync with plugin configuration instead of hardcoding values. - Add TestProviderConfigResponse interface - Export new type in provider index and main index - Endpoint returns enabled status, scenarios, methods, test mode indicators, default delay, and custom UI route Resolves #22 Co-authored-by: Bas --- src/index.ts | 1 + src/providers/index.ts | 2 +- src/providers/test.ts | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 5ecf30c..ddbd14e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,6 +11,7 @@ export type { StripeProviderConfig, MollieProviderConfig, TestProviderConfig, + TestProviderConfigResponse, PaymentOutcome, PaymentMethod, PaymentScenario diff --git a/src/providers/index.ts b/src/providers/index.ts index c593f82..38cefeb 100644 --- a/src/providers/index.ts +++ b/src/providers/index.ts @@ -7,4 +7,4 @@ export * from './currency' // Re-export provider configurations and types export type { StripeProviderConfig } from './stripe' export type { MollieProviderConfig } from './mollie' -export type { TestProviderConfig, PaymentOutcome, PaymentMethod, PaymentScenario } from './test' +export type { TestProviderConfig, TestProviderConfigResponse, PaymentOutcome, PaymentMethod, PaymentScenario } from './test' diff --git a/src/providers/test.ts b/src/providers/test.ts index 09236a5..6f629fb 100644 --- a/src/providers/test.ts +++ b/src/providers/test.ts @@ -31,6 +31,23 @@ export interface TestProviderConfig { baseUrl?: string } +export interface TestProviderConfigResponse { + enabled: boolean + scenarios: PaymentScenario[] + methods: Array<{ + id: string + name: string + icon: string + }> + testModeIndicators: { + showWarningBanners: boolean + showTestBadges: boolean + consoleWarnings: boolean + } + defaultDelay: number + customUiRoute: string +} + // Properly typed session interface export interface TestPaymentSession { id: string @@ -144,6 +161,31 @@ export const testProvider = (testConfig: TestProviderConfig) => { }) } }, + { + path: '/payload-billing/test/config', + method: 'get', + handler: async (req) => { + const response: TestProviderConfigResponse = { + enabled: testConfig.enabled, + scenarios: scenarios, + methods: Object.entries(PAYMENT_METHODS).map(([id, method]) => ({ + id, + name: method.name, + icon: method.icon + })), + testModeIndicators: testConfig.testModeIndicators || { + showWarningBanners: true, + showTestBadges: true, + consoleWarnings: true + }, + defaultDelay: testConfig.defaultDelay || 1000, + customUiRoute: uiRoute + } + return new Response(JSON.stringify(response), { + headers: { 'Content-Type': 'application/json' } + }) + } + }, { path: '/payload-billing/test/process', method: 'post',