{"version":3,"sources":["../src/server/request.ts"],"sourcesContent":["// Server-only utilities (NOT server actions - these cannot be called from client components)\n\nimport { ApiData } from \"../core/interfaces/ApiData\";\n\nexport interface ServerRequestParams {\n  method: string;\n  url: string;\n  token?: string;\n  cache?: string;\n  body?: any;\n  files?: { [key: string]: File | Blob } | File | Blob;\n  companyId?: string;\n  language: string;\n  additionalHeaders?: Record<string, string>;\n}\n\n// Map cache configuration names to revalidation times in seconds\nconst cacheLifeToSeconds: Record<string, number> = {\n  seconds: 1,\n  minutes: 60,\n  hours: 3600,\n  days: 86400,\n  weeks: 604800,\n  max: 31536000, // 1 year\n  default: 60,\n};\n\n/**\n * Server-side request with Next.js caching support.\n * Uses fetch's native caching options for Next.js compatibility.\n */\nexport async function serverRequest(params: ServerRequestParams): Promise<ApiData> {\n  const response: ApiData = {\n    data: undefined,\n    ok: false,\n    status: 0,\n    statusText: \"\",\n  };\n\n  const additionalHeaders: Record<string, string> = { ...params.additionalHeaders };\n\n  if (params.companyId) {\n    additionalHeaders[\"x-companyid\"] = params.companyId;\n  }\n  additionalHeaders[\"x-language\"] = params.language;\n\n  let requestBody: BodyInit | undefined = undefined;\n\n  if (params.files) {\n    const formData = new FormData();\n    if (params.body && typeof params.body === \"object\") {\n      for (const key in params.body) {\n        if (Object.prototype.hasOwnProperty.call(params.body, key)) {\n          formData.append(\n            key,\n            typeof params.body[key] === \"object\" ? JSON.stringify(params.body[key]) : params.body[key],\n          );\n        }\n      }\n    }\n\n    if (params.files instanceof Blob) {\n      formData.append(\"file\", params.files);\n    } else if (typeof params.files === \"object\" && params.files !== null) {\n      for (const key in params.files) {\n        if (Object.prototype.hasOwnProperty.call(params.files, key)) {\n          formData.append(key, params.files[key]);\n        }\n      }\n    }\n\n    requestBody = formData;\n  } else if (params.body !== undefined) {\n    requestBody = JSON.stringify(params.body);\n    additionalHeaders[\"Content-Type\"] = \"application/json\";\n  }\n\n  // Build Next.js fetch caching options\n  const nextOptions: { revalidate?: number; tags?: string[] } = {};\n\n  if (params.cache) {\n    // Check if it's a predefined cache life name\n    if (params.cache in cacheLifeToSeconds) {\n      nextOptions.revalidate = cacheLifeToSeconds[params.cache];\n    } else {\n      // Treat as a cache tag\n      nextOptions.tags = [params.cache];\n      nextOptions.revalidate = 60; // Default revalidation time for tagged caches\n    }\n  } else {\n    // Default to short caching\n    nextOptions.revalidate = 0;\n  }\n\n  const options: RequestInit & { next?: { revalidate?: number; tags?: string[] } } = {\n    method: params.method,\n    headers: { Accept: \"application/json\", ...additionalHeaders },\n    next: nextOptions,\n  };\n\n  if (requestBody !== undefined) {\n    options.body = requestBody;\n  }\n\n  if (params.token) {\n    options.headers = { ...options.headers, Authorization: `Bearer ${params.token}` };\n  }\n\n  try {\n    const apiResponse = await fetch(params.url, options);\n\n    response.ok = apiResponse.ok;\n    response.status = apiResponse.status;\n    response.statusText = apiResponse.statusText;\n    try {\n      response.data = await apiResponse.json();\n    } catch {\n      response.data = undefined;\n    }\n  } catch {\n    response.ok = false;\n    response.status = 500;\n    response.data = undefined;\n  }\n\n  return response;\n}\n"],"mappings":";;;;;AAiBA,IAAM,qBAA6C;AAAA,EACjD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA;AAAA,EACL,SAAS;AACX;AAMA,eAAsB,cAAc,QAA+C;AACjF,QAAM,WAAoB;AAAA,IACxB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AAEA,QAAM,oBAA4C,EAAE,GAAG,OAAO,kBAAkB;AAEhF,MAAI,OAAO,WAAW;AACpB,sBAAkB,aAAa,IAAI,OAAO;AAAA,EAC5C;AACA,oBAAkB,YAAY,IAAI,OAAO;AAEzC,MAAI,cAAoC;AAExC,MAAI,OAAO,OAAO;AAChB,UAAM,WAAW,IAAI,SAAS;AAC9B,QAAI,OAAO,QAAQ,OAAO,OAAO,SAAS,UAAU;AAClD,iBAAW,OAAO,OAAO,MAAM;AAC7B,YAAI,OAAO,UAAU,eAAe,KAAK,OAAO,MAAM,GAAG,GAAG;AAC1D,mBAAS;AAAA,YACP;AAAA,YACA,OAAO,OAAO,KAAK,GAAG,MAAM,WAAW,KAAK,UAAU,OAAO,KAAK,GAAG,CAAC,IAAI,OAAO,KAAK,GAAG;AAAA,UAC3F;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,OAAO,iBAAiB,MAAM;AAChC,eAAS,OAAO,QAAQ,OAAO,KAAK;AAAA,IACtC,WAAW,OAAO,OAAO,UAAU,YAAY,OAAO,UAAU,MAAM;AACpE,iBAAW,OAAO,OAAO,OAAO;AAC9B,YAAI,OAAO,UAAU,eAAe,KAAK,OAAO,OAAO,GAAG,GAAG;AAC3D,mBAAS,OAAO,KAAK,OAAO,MAAM,GAAG,CAAC;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,kBAAc;AAAA,EAChB,WAAW,OAAO,SAAS,QAAW;AACpC,kBAAc,KAAK,UAAU,OAAO,IAAI;AACxC,sBAAkB,cAAc,IAAI;AAAA,EACtC;AAGA,QAAM,cAAwD,CAAC;AAE/D,MAAI,OAAO,OAAO;AAEhB,QAAI,OAAO,SAAS,oBAAoB;AACtC,kBAAY,aAAa,mBAAmB,OAAO,KAAK;AAAA,IAC1D,OAAO;AAEL,kBAAY,OAAO,CAAC,OAAO,KAAK;AAChC,kBAAY,aAAa;AAAA,IAC3B;AAAA,EACF,OAAO;AAEL,gBAAY,aAAa;AAAA,EAC3B;AAEA,QAAM,UAA6E;AAAA,IACjF,QAAQ,OAAO;AAAA,IACf,SAAS,EAAE,QAAQ,oBAAoB,GAAG,kBAAkB;AAAA,IAC5D,MAAM;AAAA,EACR;AAEA,MAAI,gBAAgB,QAAW;AAC7B,YAAQ,OAAO;AAAA,EACjB;AAEA,MAAI,OAAO,OAAO;AAChB,YAAQ,UAAU,EAAE,GAAG,QAAQ,SAAS,eAAe,UAAU,OAAO,KAAK,GAAG;AAAA,EAClF;AAEA,MAAI;AACF,UAAM,cAAc,MAAM,MAAM,OAAO,KAAK,OAAO;AAEnD,aAAS,KAAK,YAAY;AAC1B,aAAS,SAAS,YAAY;AAC9B,aAAS,aAAa,YAAY;AAClC,QAAI;AACF,eAAS,OAAO,MAAM,YAAY,KAAK;AAAA,IACzC,QAAQ;AACN,eAAS,OAAO;AAAA,IAClB;AAAA,EACF,QAAQ;AACN,aAAS,KAAK;AACd,aAAS,SAAS;AAClB,aAAS,OAAO;AAAA,EAClB;AAEA,SAAO;AACT;AA/FsB;","names":[]}