feat: make InitPayment support both async and non-async functions

- Updated InitPayment type to return Promise<Partial<Payment>> | Partial<Payment>
- Modified initProviderPayment hook to handle both async and sync returns using Promise.resolve()
- Enables payment providers to use either async or synchronous initPayment implementations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-19 14:00:58 +02:00
parent dc9bc2db57
commit 05d612e606
3 changed files with 6 additions and 4 deletions

View File

@@ -2,10 +2,12 @@ import type { Payment } from '../plugin/types/index'
import type { Payload } from 'payload' import type { Payload } from 'payload'
import { useBillingPlugin } from '../plugin/index' import { useBillingPlugin } from '../plugin/index'
export const initProviderPayment = (payload: Payload, payment: Partial<Payment>) => { export const initProviderPayment = async (payload: Payload, payment: Partial<Payment>): Promise<Partial<Payment>> => {
const billing = useBillingPlugin(payload) const billing = useBillingPlugin(payload)
if (!payment.provider || !billing.providerConfig[payment.provider]) { if (!payment.provider || !billing.providerConfig[payment.provider]) {
throw new Error(`Provider ${payment.provider} not found.`) throw new Error(`Provider ${payment.provider} not found.`)
} }
return billing.providerConfig[payment.provider].initPayment(payload, payment) // Handle both async and non-async initPayment functions
const result = billing.providerConfig[payment.provider].initPayment(payload, payment)
return await Promise.resolve(result)
} }

View File

@@ -392,7 +392,7 @@ export const testProvider = (testConfig: TestProviderConfig) => {
{ {
path: '/payload-billing/test/status/:id', path: '/payload-billing/test/status/:id',
method: 'get', method: 'get',
handler: async (req) => { handler: (req) => {
// Extract payment ID from URL path // Extract payment ID from URL path
const urlParts = req.url?.split('/') || [] const urlParts = req.url?.split('/') || []
const paymentId = urlParts[urlParts.length - 1] const paymentId = urlParts[urlParts.length - 1]

View File

@@ -2,7 +2,7 @@ import type { Payment } from '../plugin/types/payments'
import type { Config, Payload } from 'payload' import type { Config, Payload } from 'payload'
import type { BillingPluginConfig } from '../plugin/config' import type { BillingPluginConfig } from '../plugin/config'
export type InitPayment = (payload: Payload, payment: Partial<Payment>) => Promise<Partial<Payment>> export type InitPayment = (payload: Payload, payment: Partial<Payment>) => Promise<Partial<Payment>> | Partial<Payment>
export type PaymentProvider = { export type PaymentProvider = {
key: string key: string