better-payment
Version:
Unified payment gateway library for Turkish payment providers
1 lines • 9.08 kB
Source Map (JSON)
{"version":3,"sources":["../../src/adapters/next-js.ts"],"names":[],"mappings":"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","file":"next-js.mjs","sourcesContent":["import { BetterPayHandler, BetterPayRequest } from '../core/BetterPayHandler';\nimport { NextRequest, NextResponse } from 'next/server';\nimport type { NextApiRequest, NextApiResponse } from 'next';\n\n/**\n * Next.js App Router adapter for BetterPay\n *\n * Bu adapter, BetterPay handler'ını Next.js App Router ile uyumlu hale getirir.\n *\n * @example\n * ```typescript\n * // app/api/pay/[...all]/route.ts\n * import { betterPay } from '@/lib/payment';\n * import { toNextJsHandler } from 'better-pay/next-js';\n *\n * export const { GET, POST } = toNextJsHandler(betterPay.handler);\n * ```\n *\n * @param handler - BetterPayHandler instance\n * @returns Next.js route handlers (GET ve POST metodları)\n */\nexport function toNextJsHandler(handler: BetterPayHandler) {\n const routeHandler = async (request: NextRequest) => {\n try {\n // Next.js Request'i BetterPayRequest'e dönüştür\n const betterPayRequest: BetterPayRequest = {\n method: request.method,\n url: request.url,\n headers: Object.fromEntries(request.headers.entries()),\n body: await parseBody(request),\n };\n\n // Handler'ı çağır\n const response = await handler.handle(betterPayRequest);\n\n // BetterPayResponse'u Next.js Response'a dönüştür\n return NextResponse.json(response.body, {\n status: response.status,\n headers: response.headers,\n });\n } catch (error: any) {\n return NextResponse.json(\n {\n error: true,\n message: error.message || 'Internal server error',\n },\n { status: 500 }\n );\n }\n };\n\n return {\n GET: routeHandler,\n POST: routeHandler,\n };\n}\n\n/**\n * Next.js Request body'sini parse et\n */\nasync function parseBody(request: NextRequest): Promise<any> {\n const contentType = request.headers.get('content-type') || '';\n\n // GET request - URL params'tan data al\n if (request.method === 'GET') {\n const searchParams = new URL(request.url).searchParams;\n const params: Record<string, any> = {};\n searchParams.forEach((value, key) => {\n params[key] = value;\n });\n return Object.keys(params).length > 0 ? params : undefined;\n }\n\n // POST request - body'yi parse et\n if (contentType.includes('application/json')) {\n try {\n return await request.json();\n } catch {\n return undefined;\n }\n }\n\n if (contentType.includes('application/x-www-form-urlencoded')) {\n const formData = await request.formData();\n const params: Record<string, any> = {};\n formData.forEach((value: string | File, key: string) => {\n params[key] = value;\n });\n return params;\n }\n\n // Default: text olarak al\n try {\n const text = await request.text();\n return text || undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Next.js Pages Router adapter for BetterPay\n *\n * Bu adapter, BetterPay handler'ını Next.js Pages Router ile uyumlu hale getirir.\n *\n * @example\n * ```typescript\n * // pages/api/pay/[...all].ts\n * import { betterPay } from '@/lib/payment';\n * import { toNodeHandler } from 'better-pay/next-js';\n *\n * // Body parser'ı devre dışı bırak (Better Pay kendi parse eder)\n * export const config = {\n * api: {\n * bodyParser: false,\n * },\n * };\n *\n * export default toNodeHandler(betterPay.handler);\n * ```\n *\n * @param handler - BetterPayHandler instance\n * @returns Next.js API route handler\n */\nexport function toNodeHandler(handler: BetterPayHandler) {\n return async (req: NextApiRequest, res: NextApiResponse) => {\n try {\n // Construct full URL\n const protocol = req.headers['x-forwarded-proto'] || 'http';\n const host = req.headers['x-forwarded-host'] || req.headers.host;\n const url = `${protocol}://${host}${req.url}`;\n\n // Next.js API Request'i BetterPayRequest'e dönüştür\n const betterPayRequest: BetterPayRequest = {\n method: req.method || 'GET',\n url,\n headers: req.headers as Record<string, string>,\n body: await parseNodeBody(req),\n };\n\n // Handler'ı çağır\n const response = await handler.handle(betterPayRequest);\n\n // Response headers'ı set et\n Object.entries(response.headers).forEach(([key, value]) => {\n res.setHeader(key, value);\n });\n\n // Response'u gönder\n res.status(response.status).json(response.body);\n } catch (error: any) {\n res.status(500).json({\n error: true,\n message: error.message || 'Internal server error',\n });\n }\n };\n}\n\n/**\n * Next.js Pages Router request body'sini parse et\n */\nasync function parseNodeBody(req: NextApiRequest): Promise<any> {\n // GET request - query params\n if (req.method === 'GET') {\n return Object.keys(req.query).length > 0 ? req.query : undefined;\n }\n\n // POST request - body already parsed by Next.js if bodyParser is enabled\n if (req.body && Object.keys(req.body).length > 0) {\n return req.body;\n }\n\n // If bodyParser is disabled, manually parse the body\n return new Promise((resolve) => {\n let body = '';\n req.on('data', (chunk: Buffer) => {\n body += chunk.toString();\n });\n req.on('end', () => {\n try {\n resolve(body ? JSON.parse(body) : undefined);\n } catch {\n resolve(body || undefined);\n }\n });\n });\n}\n"]}