1import { NextRequest, NextResponse } from 'next/server';
2import { fieldpineServerApi } from '@/lib/server/fieldpineApi';
3import { getRequestContext } from '@/lib/server/sessionUtils';
6 * eLink/BUCK Products Endpoint
7 * Uses Fieldpine's BUCK API via eLink protocol
8 * Documentation: https://docs.fieldpine.com/pos/elink.htm
10export async function GET(request: NextRequest) {
12 // Get request context with authentication
13 const context = await getRequestContext(request);
14 if (!context?.session) {
15 return NextResponse.json(
16 { error: 'Authentication required' },
22 const clientId = request.headers.get('x-forwarded-for') ||
23 request.headers.get('x-real-ip') ||
24 context.session.userId ||
26 if (!fieldpineServerApi.checkClientRateLimit(clientId)) {
27 return NextResponse.json(
28 { error: 'Rate limit exceeded' },
33 // Parse query parameters
34 const { searchParams } = new URL(request.url);
35 const params: Record<string, string | number> = {};
37 const search = searchParams.get('search');
38 if (search) params.search = search;
40 const plu = searchParams.get('plu');
41 if (plu) params.plu = plu;
43 const barcode = searchParams.get('barcode');
44 if (barcode) params.barcode = barcode;
46 const limit = searchParams.get('limit');
47 if (limit) params.limit = parseInt(limit);
49 // Call Fieldpine BUCK API via eLink protocol
51 const products = await fieldpineServerApi.getProducts(params, context.session.apiKey);
53 return NextResponse.json({
60 console.error('eLink products error:', error);
61 return NextResponse.json(
62 { error: 'eLink endpoint unavailable', source: 'elink' },
68 console.error('eLink products error:', error);
69 return NextResponse.json(
70 { error: 'Failed to fetch products' },