larkup 0.1.29 → 0.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +5 -5
  3. package/.next/diagnostics/route-bundle-stats.json +35 -35
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/next-minimal-server.js.nft.json +1 -1
  6. package/.next/next-server.js.nft.json +1 -1
  7. package/.next/prerender-manifest.json +3 -3
  8. package/.next/required-server-files.js +4 -4
  9. package/.next/required-server-files.json +4 -4
  10. package/.next/server/app/_global-error/page/build-manifest.json +2 -2
  11. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  12. package/.next/server/app/_global-error.html +1 -1
  13. package/.next/server/app/_global-error.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  18. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/server/app/_not-found/page/build-manifest.json +2 -2
  20. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  21. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/_not-found.html +1 -1
  23. package/.next/server/app/_not-found.rsc +16 -16
  24. package/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
  25. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  26. package/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  27. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  28. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  29. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  30. package/.next/server/app/analytics/page/build-manifest.json +2 -2
  31. package/.next/server/app/analytics/page.js.nft.json +1 -1
  32. package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/analytics.html +1 -1
  34. package/.next/server/app/analytics.rsc +17 -17
  35. package/.next/server/app/analytics.segments/_full.segment.rsc +17 -17
  36. package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
  37. package/.next/server/app/analytics.segments/_index.segment.rsc +11 -11
  38. package/.next/server/app/analytics.segments/_tree.segment.rsc +1 -1
  39. package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +3 -3
  40. package/.next/server/app/analytics.segments/analytics.segment.rsc +3 -3
  41. package/.next/server/app/api/analytics/route.js.nft.json +1 -1
  42. package/.next/server/app/api/chat/route.js.nft.json +1 -1
  43. package/.next/server/app/api/chat/status/route.js.nft.json +1 -1
  44. package/.next/server/app/api/chat/suggestions/route.js.nft.json +1 -1
  45. package/.next/server/app/api/config/route.js.nft.json +1 -1
  46. package/.next/server/app/api/config/test/route.js.nft.json +1 -1
  47. package/.next/server/app/api/config/test-embedding/route.js.nft.json +1 -1
  48. package/.next/server/app/api/config/test-llm/route.js.nft.json +1 -1
  49. package/.next/server/app/api/config/test-provider/route.js +4 -4
  50. package/.next/server/app/api/config/test-provider/route.js.nft.json +1 -1
  51. package/.next/server/app/api/config/verify/route.js +3 -3
  52. package/.next/server/app/api/config/verify/route.js.nft.json +1 -1
  53. package/.next/server/app/api/connections/route.js.nft.json +1 -1
  54. package/.next/server/app/api/connections/webhook/route.js.nft.json +1 -1
  55. package/.next/server/app/api/demo/route.js.nft.json +1 -1
  56. package/.next/server/app/api/deploy/cloud-project/route.js.nft.json +1 -1
  57. package/.next/server/app/api/deploy/ssh/route.js.nft.json +1 -1
  58. package/.next/server/app/api/deployment/blob-setup/route.js.nft.json +1 -1
  59. package/.next/server/app/api/deployment/config/route.js.nft.json +1 -1
  60. package/.next/server/app/api/describe-image/route.js.nft.json +1 -1
  61. package/.next/server/app/api/doc-editor/edit/route.js.nft.json +1 -1
  62. package/.next/server/app/api/doc-editor/export/route.js.nft.json +1 -1
  63. package/.next/server/app/api/doc-editor/extract-text/route.js.nft.json +1 -1
  64. package/.next/server/app/api/doc-editor/parse/route.js.nft.json +1 -1
  65. package/.next/server/app/api/doc-editor/restore/route.js.nft.json +1 -1
  66. package/.next/server/app/api/document/sign/route.js.nft.json +1 -1
  67. package/.next/server/app/api/documents/route.js.nft.json +1 -1
  68. package/.next/server/app/api/firecrawl/local/route.js.nft.json +1 -1
  69. package/.next/server/app/api/index/route.js.nft.json +1 -1
  70. package/.next/server/app/api/integrations/notion/callback/route.js.nft.json +1 -1
  71. package/.next/server/app/api/integrations/notion/route.js.nft.json +1 -1
  72. package/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -1
  73. package/.next/server/app/api/jobs/route.js.nft.json +1 -1
  74. package/.next/server/app/api/marketplace/[toolId]/route.js.nft.json +1 -1
  75. package/.next/server/app/api/marketplace/route.js.nft.json +1 -1
  76. package/.next/server/app/api/media/[id]/route.js.nft.json +1 -1
  77. package/.next/server/app/api/media/process/route.js.nft.json +1 -1
  78. package/.next/server/app/api/media/route.js.nft.json +1 -1
  79. package/.next/server/app/api/media/stream/route.js.nft.json +1 -1
  80. package/.next/server/app/api/models/route.js.nft.json +1 -1
  81. package/.next/server/app/api/parse-file/route.js.nft.json +1 -1
  82. package/.next/server/app/api/proxy/verify/route.js.nft.json +1 -1
  83. package/.next/server/app/api/sandbox/route.js.nft.json +1 -1
  84. package/.next/server/app/api/search/bing/route.js.nft.json +1 -1
  85. package/.next/server/app/api/search/brave/route.js.nft.json +1 -1
  86. package/.next/server/app/api/search/exa/route.js.nft.json +1 -1
  87. package/.next/server/app/api/search/google/route.js.nft.json +1 -1
  88. package/.next/server/app/api/search/route.js.nft.json +1 -1
  89. package/.next/server/app/api/search/tavily/route.js.nft.json +1 -1
  90. package/.next/server/app/api/search/verify/route.js.nft.json +1 -1
  91. package/.next/server/app/api/server/agent/route.js.nft.json +1 -1
  92. package/.next/server/app/api/server/download/route.js.nft.json +1 -1
  93. package/.next/server/app/api/server/generate/route.js.nft.json +1 -1
  94. package/.next/server/app/api/server/local/route.js.nft.json +1 -1
  95. package/.next/server/app/api/servers/route.js.nft.json +1 -1
  96. package/.next/server/app/api/tabular/query/route.js.nft.json +1 -1
  97. package/.next/server/app/api/tabular/route.js.nft.json +1 -1
  98. package/.next/server/app/api/upload-file/route.js.nft.json +1 -1
  99. package/.next/server/app/api/uploads/[...slug]/route.js.nft.json +1 -1
  100. package/.next/server/app/api/vector-stores/install/route.js.nft.json +1 -1
  101. package/.next/server/app/api/vector-stores/status/route.js.nft.json +1 -1
  102. package/.next/server/app/chat/page/build-manifest.json +2 -2
  103. package/.next/server/app/chat/page.js.nft.json +1 -1
  104. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  105. package/.next/server/app/chat.html +1 -1
  106. package/.next/server/app/chat.rsc +17 -17
  107. package/.next/server/app/chat.segments/_full.segment.rsc +17 -17
  108. package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
  109. package/.next/server/app/chat.segments/_index.segment.rsc +11 -11
  110. package/.next/server/app/chat.segments/_tree.segment.rsc +1 -1
  111. package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +3 -3
  112. package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
  113. package/.next/server/app/data/page/build-manifest.json +2 -2
  114. package/.next/server/app/data/page.js.nft.json +1 -1
  115. package/.next/server/app/data/page_client-reference-manifest.js +1 -1
  116. package/.next/server/app/data.html +1 -1
  117. package/.next/server/app/data.rsc +17 -17
  118. package/.next/server/app/data.segments/_full.segment.rsc +17 -17
  119. package/.next/server/app/data.segments/_head.segment.rsc +4 -4
  120. package/.next/server/app/data.segments/_index.segment.rsc +11 -11
  121. package/.next/server/app/data.segments/_tree.segment.rsc +1 -1
  122. package/.next/server/app/data.segments/data/__PAGE__.segment.rsc +3 -3
  123. package/.next/server/app/data.segments/data.segment.rsc +3 -3
  124. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  125. package/.next/server/app/index.html +1 -1
  126. package/.next/server/app/index.rsc +16 -16
  127. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  128. package/.next/server/app/index.segments/_full.segment.rsc +16 -16
  129. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  130. package/.next/server/app/index.segments/_index.segment.rsc +11 -11
  131. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  132. package/.next/server/app/page/build-manifest.json +2 -2
  133. package/.next/server/app/page.js.nft.json +1 -1
  134. package/.next/server/app/page_client-reference-manifest.js +1 -1
  135. package/.next/server/app/settings/page/build-manifest.json +2 -2
  136. package/.next/server/app/settings/page/server-reference-manifest.json +3 -3
  137. package/.next/server/app/settings/page.js.nft.json +1 -1
  138. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  139. package/.next/server/app/settings.html +1 -1
  140. package/.next/server/app/settings.rsc +18 -18
  141. package/.next/server/app/settings.segments/_full.segment.rsc +18 -18
  142. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  143. package/.next/server/app/settings.segments/_index.segment.rsc +11 -11
  144. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  145. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  146. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  147. package/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_0kbcuk-.js +4 -3
  148. package/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_1f4h7rr.js +1 -1
  149. package/.next/server/chunks/[root-of-the-server]__067hiof._.js +18 -6
  150. package/.next/server/chunks/[root-of-the-server]__0a_0ywc._.js +18 -6
  151. package/.next/server/chunks/[root-of-the-server]__0u17zp8._.js +18 -6
  152. package/.next/server/chunks/{[root-of-the-server]__1xuhh_i._.js → [root-of-the-server]__16jk_se._.js} +2 -2
  153. package/.next/server/chunks/[root-of-the-server]__1ahdfq9._.js +19 -7
  154. package/.next/server/chunks/[root-of-the-server]__1o3rcbz._.js +2 -1
  155. package/.next/server/chunks/{[root-of-the-server]__10gcb7d._.js → [root-of-the-server]__1qh2h5v._.js} +2 -2
  156. package/.next/server/chunks/[root-of-the-server]__1s9is1o._.js +2 -1
  157. package/.next/server/chunks/[root-of-the-server]__1vsvck0._.js +18 -6
  158. package/.next/server/chunks/[root-of-the-server]__1wy6wes._.js +1 -1
  159. package/.next/server/chunks/[root-of-the-server]__1zptg4z._.js +2 -1
  160. package/.next/server/chunks/packages_core_src_generator_server-runtime_ts_1_68l7t._.js +4 -4
  161. package/.next/server/chunks/packages_marketplace_src_125_g2p._.js +1 -1
  162. package/.next/server/chunks/ssr/{[root-of-the-server]__0wdatpx._.js → [root-of-the-server]__0m21fli._.js} +1 -1
  163. package/.next/server/chunks/ssr/{[root-of-the-server]__1r9ap67._.js → [root-of-the-server]__0t8ud_u._.js} +1 -1
  164. package/.next/server/chunks/ssr/{[root-of-the-server]__046ldu_._.js → [root-of-the-server]__0xyo3ni._.js} +1 -1
  165. package/.next/server/chunks/ssr/{_0k81--x._.js → _0ckxy33._.js} +2 -2
  166. package/.next/server/chunks/ssr/_169pdlf._.js +6 -6
  167. package/.next/server/chunks/ssr/_1hetwwu._.js +4 -3
  168. package/.next/server/chunks/ssr/_1iff9ia._.js +1 -1
  169. package/.next/server/chunks/ssr/_1yqlx1m._.js +1 -1
  170. package/.next/server/chunks/ssr/apps_web_components_analytics_analytics-dashboard_tsx_1056-z3._.js +1 -1
  171. package/.next/server/functions-config-manifest.json +3 -1
  172. package/.next/server/middleware-build-manifest.js +5 -5
  173. package/.next/server/pages/404.html +1 -1
  174. package/.next/server/pages/500.html +1 -1
  175. package/.next/server/server-reference-manifest.js +1 -1
  176. package/.next/server/server-reference-manifest.json +4 -4
  177. package/.next/static/chunks/{1z4nte07k3dt6.js → 1-afr-snks55m.js} +1 -1
  178. package/.next/static/chunks/{1dykihoo_1ae5.js → 1fz_0-qb5r5wd.js} +1 -1
  179. package/.next/static/chunks/{1sh7d5tt49x8b.js → 1uzf7x2okeuab.js} +6 -6
  180. package/.next/static/chunks/{3g_wl1fri6jb-.js → 21_6-9hjj2i68.js} +1 -1
  181. package/.next/static/chunks/{13kyiy7q3of41.js → 2jqjx4-rh414_.js} +1 -1
  182. package/.next/static/chunks/2jrpgzxyrmuqp.js +121 -0
  183. package/.next/static/chunks/390ds7l_plpmd.js +1 -0
  184. package/.next/static/chunks/{3een1tiktxr6a.js → 3zw6tgf7mxo39.js} +1 -1
  185. package/.next/static/chunks/{turbopack-2qt7vn_ocj4ao.js → turbopack-2gu-fmc6o5wkn.js} +1 -1
  186. package/CHANGELOG.md +12 -0
  187. package/app/api/chat/route.ts +1 -0
  188. package/app/api/chat/tools.ts +5 -1
  189. package/app/api/config/test-provider/route.ts +16 -18
  190. package/app/api/config/verify/route.ts +5 -7
  191. package/app/api/firecrawl/local/route.ts +1 -1
  192. package/app/api/jobs/route.ts +1 -2
  193. package/app/api/marketplace/[toolId]/route.ts +1 -0
  194. package/archive/redesign-v2/app/configure/page.tsx +53 -0
  195. package/archive/redesign-v2/app/demo/page.tsx +15 -0
  196. package/archive/redesign-v2/app/server/page.tsx +22 -0
  197. package/archive/redesign-v2/app/simple/chat/page.tsx +17 -0
  198. package/archive/redesign-v2/app/simple/docs/page.tsx +21 -0
  199. package/archive/redesign-v2/app/simple/settings/page.tsx +1104 -0
  200. package/archive/redesign-v2/app-routes/configure/page.tsx +53 -0
  201. package/archive/redesign-v2/app-routes/demo/page.tsx +15 -0
  202. package/archive/redesign-v2/app-routes/server/page.tsx +22 -0
  203. package/archive/redesign-v2/app-routes/simple/chat/page.tsx +17 -0
  204. package/archive/redesign-v2/app-routes/simple/docs/page.tsx +21 -0
  205. package/archive/redesign-v2/app-routes/simple/layout.tsx +9 -0
  206. package/archive/redesign-v2/app-routes/simple/settings/page.tsx +1104 -0
  207. package/archive/redesign-v2/components/app-sidebar.tsx +188 -0
  208. package/archive/redesign-v2/components/app-topnav.tsx +195 -0
  209. package/archive/redesign-v2/components/global-settings.tsx +288 -0
  210. package/archive/redesign-v2/components/simple/simple-sidebar.tsx +171 -0
  211. package/archive/redesign-v2/components/simple/simple-topnav.tsx +175 -0
  212. package/components/analytics/analytics-dashboard.tsx +1 -1
  213. package/components/data/firecrawl-notice.tsx +49 -98
  214. package/components/data/media-panel.tsx +0 -3
  215. package/components/data/scrape-panel.tsx +17 -1
  216. package/components/onboarding/welcome-screen.tsx +45 -15
  217. package/components/settings/general-section.tsx +15 -10
  218. package/components/settings/server-section.tsx +3 -3
  219. package/lib/error-formatter.ts +19 -4
  220. package/package.json +7 -7
  221. package/.next/static/chunks/01qmngac69n9j.js +0 -1
  222. package/.next/static/chunks/102b8vinedggz.js +0 -120
  223. /package/.next/static/{W6QdudzTPo_OVPpNt29f7 → Laf7YhpONHOZXSCw6POiL}/_buildManifest.js +0 -0
  224. /package/.next/static/{W6QdudzTPo_OVPpNt29f7 → Laf7YhpONHOZXSCw6POiL}/_clientMiddlewareManifest.js +0 -0
  225. /package/.next/static/{W6QdudzTPo_OVPpNt29f7 → Laf7YhpONHOZXSCw6POiL}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- module.exports=[367165,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(638725),n=e.i(192441);async function i(){let e=await (0,n.getDataDir)();if(!e)return a.DEFAULT_CONFIG;try{let n=await t.promises.readFile(r.default.join(e,"config.json"),"utf8"),i=JSON.parse(n),o=i.customEmbeddings,s=i.embeddingModelId;if(i.customEmbedding&&!o?.length){let e=i.customEmbedding;o=[e],"custom"===s&&(s=`custom:${e.modelName}`)}let l={...a.DEFAULT_CONFIG,...i,embeddingModelId:s??a.DEFAULT_CONFIG.embeddingModelId,customEmbeddings:o,chunking:{...a.DEFAULT_CONFIG.chunking,...i.chunking},storeConfig:{...a.DEFAULT_CONFIG.storeConfig,...i.storeConfig}};return delete l.customEmbedding,l}catch{return a.DEFAULT_CONFIG}}async function o(e){let a=await (0,n.requireDataDir)(),i={...e,updatedAt:new Date().toISOString()};return await t.promises.writeFile(r.default.join(a,"config.json"),JSON.stringify(i,null,2),"utf8"),i}e.s(["readConfig",0,i,"writeConfig",0,o])},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},705252,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(666680),n=e.i(192441);let i=Promise.resolve();function o(e){let t=i.then(e,e);return i=t.catch(()=>{}),t}async function s(e){let t=e?await (0,n.requireDataDir)():await (0,n.getDataDir)();return t?r.default.join(t,"documents.json"):null}async function l(){let e=await s(!1);if(!e)return[];try{let r=await t.promises.readFile(e,"utf8"),a=JSON.parse(r);if(!Array.isArray(a))throw Error(`Invalid document store at ${e}: expected a JSON array.`);return a}catch(e){if(e?.code==="ENOENT")return[];throw e}}async function c(e){let n=await s(!0);if(!n)return;let i=r.default.join(r.default.dirname(n),`.${r.default.basename(n)}.${process.pid}.${(0,a.randomUUID)()}.tmp`);try{await t.promises.writeFile(i,JSON.stringify(e,null,2),"utf8"),await t.promises.rename(i,n)}catch(e){throw await t.promises.unlink(i).catch(()=>{}),e}}function u(e){let t=e.content.trim();return{id:e.id??(0,a.randomUUID)(),title:e.title.trim()||"Untitled",url:e.url,source:e.source,content:t,charCount:t.length,jobId:e.jobId,metadata:e.metadata,status:"unindexed",createdAt:new Date().toISOString()}}async function d(){let e=await l(),t=e.reduce((e,t)=>e+t.charCount,0);return{docCount:e.length,charCount:t,bySource:e.reduce((e,t)=>(e[t.source]=(e[t.source]??0)+1,e),{})}}e.s(["addCrawledDocuments",0,function(e,t){return o(async()=>{let r=await l(),a=new Set(r.filter(e=>e.url).map(e=>e.url)),n=0;for(let i of t)!(i.url&&a.has(i.url))&&i.content.trim()&&(r.push(u({...i,jobId:e})),i.url&&a.add(i.url),n++);return n>0&&await c(r),n})},"addDocument",0,function(e){return o(async()=>{let t=await l(),r=u(e);return t.push(r),await c(t),r})},"addDocuments",0,function(e){return o(async()=>{if(0===e.length)return[];let t=await l(),r=e.map(u);return t.push(...r),await c(t),r})},"clearDocuments",0,function(){return o(async()=>{await c([])})},"corpusStats",0,d,"deleteDocument",0,function(e){return o(async()=>{let t=await l();await c(t.filter(t=>t.id!==e))})},"deleteDocuments",0,function(e){return o(async()=>{let t=await l(),r=new Set(e);await c(t.filter(e=>!r.has(e.id)))})},"readDocuments",0,l,"replaceDocuments",0,function(e){return o(async()=>{let t=new Date().toISOString();await c(e.map(e=>({...e,status:"unindexed",createdAt:e.createdAt||t})))})},"updateDocument",0,function(e,t){return o(async()=>{let r=await l(),a=r.findIndex(t=>t.id===e);if(a<0)return;let n=r[a],i=void 0!==t.content?t.content.trim():n.content,o={...n,title:void 0!==t.title?t.title.trim()||"Untitled":n.title,content:i,charCount:i.length,url:void 0!==t.url?t.url||void 0:n.url,metadata:void 0!==t.metadata?t.metadata:n.metadata,status:"unindexed"};return r[a]=o,await c(r),o})},"updateDocumentsStatus",0,function(e,t){return o(async()=>{let r=await l(),a=new Set(e),n=!1;for(let e of r)a.has(e.id)&&(e.status=t,n=!0);n&&await c(r)})}])},700259,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(761095),n=e.i(666680),i=e.i(874533),o=e.i(812057),s=e.i(367165);let l=(0,o.promisify)(i.exec);async function c(e,t){return l(e,{timeout:t,env:{...process.env,PATH:`${process.env.PATH||""}:/usr/local/bin:/opt/homebrew/bin:/bin:/usr/bin`}})}let u=r.default.join(process.cwd(),".larkup"),d=r.default.join(u,"firecrawl-local.json"),p=r.default.join(u,"firecrawl","docker-compose.yml"),w="ragtoolkit-firecrawl";async function f(e){return new Promise((t,r)=>{let n=a.default.createServer();n.listen(e,()=>{let e=n.address().port;n.close(()=>t(e))}),n.on("error",a=>{"EADDRINUSE"===a.code?f(0===e?0:e+1).then(t,r):r(a)})})}async function m(){try{let e=r.default.join(process.cwd(),"proxies.txt"),a=(await t.promises.readFile(e,"utf8")).split("\n").map(e=>e.trim()).filter(e=>e.length>0);if(a.length>0){let e=a[Math.floor(Math.random()*a.length)].split(":");if(e.length>=4)return{server:`http://${e[0]}:${e[1]}`,username:e[2],password:e[3]}}}catch(e){}let e=await (0,s.readConfig)();return e.useScraperProxy&&e.scraperProxyServer?{server:e.scraperProxyServer,username:e.scraperProxyUsername,password:e.scraperProxyPassword}:null}let h={running:!1,endpoint:"http://localhost:3002",apiKey:"",port:3002,project:w};async function g(){try{let e=await t.promises.readFile(d,"utf8");return{...h,...JSON.parse(e)}}catch{return h}}async function y(e){return await t.promises.mkdir(u,{recursive:!0}),await t.promises.writeFile(d,JSON.stringify(e,null,2),"utf8"),e}async function v(){try{await c("docker --version")}catch(e){return console.error("DOCKER ERR:",e),{docker:!1,compose:null}}try{return await c("docker compose version"),{docker:!0,compose:"docker compose"}}catch(e){console.error("DOCKER COMPOSE ERR:",e)}try{return await c("docker-compose version"),{docker:!0,compose:"docker-compose"}}catch{return{docker:!0,compose:null}}}async function E(){let{docker:e,compose:t}=await v();return e?t?{docker:!0,compose:!0,message:"Docker is ready."}:{docker:!0,compose:!1,message:"Docker is installed but the Compose plugin was not found. Install `docker compose` to launch Firecrawl locally."}:{docker:!1,compose:!1,message:"Docker isn't available on this machine. Install Docker Desktop (or the Docker engine) and make sure it's running."}}function R(e,t,r){let a=r?[`PROXY_SERVER: "${r.server}"`,...r.username&&r.password?[`PROXY_USERNAME: "${r.username}"`,`PROXY_PASSWORD: "${r.password}"`]:[]]:[],n=['PORT: "3000"',...a].map(e=>` ${e}`).join("\n"),i=['PORT: "3002"',...a,'HOST: "0.0.0.0"','REDIS_URL: "redis://redis:6379"','REDIS_RATE_LIMIT_URL: "redis://redis:6379"','PLAYWRIGHT_MICROSERVICE_URL: "http://playwright-service:3000/scrape"','USE_DB_AUTHENTICATION: "false"',`TEST_API_KEY: "${e}"`,`BULL_AUTH_KEY: "${e}"`,'DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_RABBITMQ_URL: "amqp://user:password@rabbitmq:5672"'].map(e=>` ${e}`).join("\n");return`# Auto-generated by RAG Toolkit. Do not edit by hand.
1
+ module.exports=[367165,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(638725),n=e.i(192441);async function i(){let e=await (0,n.getDataDir)();if(!e)return a.DEFAULT_CONFIG;try{let n=await t.promises.readFile(r.default.join(e,"config.json"),"utf8"),i=JSON.parse(n),o=i.customEmbeddings,s=i.embeddingModelId;if(i.customEmbedding&&!o?.length){let e=i.customEmbedding;o=[e],"custom"===s&&(s=`custom:${e.modelName}`)}let l={...a.DEFAULT_CONFIG,...i,embeddingModelId:s??a.DEFAULT_CONFIG.embeddingModelId,customEmbeddings:o,chunking:{...a.DEFAULT_CONFIG.chunking,...i.chunking},storeConfig:{...a.DEFAULT_CONFIG.storeConfig,...i.storeConfig}};return delete l.customEmbedding,l}catch{return a.DEFAULT_CONFIG}}async function o(e){let a=await (0,n.requireDataDir)(),i={...e,updatedAt:new Date().toISOString()};return await t.promises.writeFile(r.default.join(a,"config.json"),JSON.stringify(i,null,2),"utf8"),i}e.s(["readConfig",0,i,"writeConfig",0,o])},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},705252,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(666680),n=e.i(192441);let i=Promise.resolve();function o(e){let t=i.then(e,e);return i=t.catch(()=>{}),t}async function s(e){let t=e?await (0,n.requireDataDir)():await (0,n.getDataDir)();return t?r.default.join(t,"documents.json"):null}async function l(){let e=await s(!1);if(!e)return[];try{let r=await t.promises.readFile(e,"utf8"),a=JSON.parse(r);if(!Array.isArray(a))throw Error(`Invalid document store at ${e}: expected a JSON array.`);return a}catch(e){if(e?.code==="ENOENT")return[];throw e}}async function c(e){let n=await s(!0);if(!n)return;let i=r.default.join(r.default.dirname(n),`.${r.default.basename(n)}.${process.pid}.${(0,a.randomUUID)()}.tmp`);try{await t.promises.writeFile(i,JSON.stringify(e,null,2),"utf8"),await t.promises.rename(i,n)}catch(e){throw await t.promises.unlink(i).catch(()=>{}),e}}function u(e){let t=e.content.trim();return{id:e.id??(0,a.randomUUID)(),title:e.title.trim()||"Untitled",url:e.url,source:e.source,content:t,charCount:t.length,jobId:e.jobId,metadata:e.metadata,status:"unindexed",createdAt:new Date().toISOString()}}async function d(){let e=await l(),t=e.reduce((e,t)=>e+t.charCount,0);return{docCount:e.length,charCount:t,bySource:e.reduce((e,t)=>(e[t.source]=(e[t.source]??0)+1,e),{})}}e.s(["addCrawledDocuments",0,function(e,t){return o(async()=>{let r=await l(),a=new Set(r.filter(e=>e.url).map(e=>e.url)),n=0;for(let i of t)!(i.url&&a.has(i.url))&&i.content.trim()&&(r.push(u({...i,jobId:e})),i.url&&a.add(i.url),n++);return n>0&&await c(r),n})},"addDocument",0,function(e){return o(async()=>{let t=await l(),r=u(e);return t.push(r),await c(t),r})},"addDocuments",0,function(e){return o(async()=>{if(0===e.length)return[];let t=await l(),r=e.map(u);return t.push(...r),await c(t),r})},"clearDocuments",0,function(){return o(async()=>{await c([])})},"corpusStats",0,d,"deleteDocument",0,function(e){return o(async()=>{let t=await l();await c(t.filter(t=>t.id!==e))})},"deleteDocuments",0,function(e){return o(async()=>{let t=await l(),r=new Set(e);await c(t.filter(e=>!r.has(e.id)))})},"readDocuments",0,l,"replaceDocuments",0,function(e){return o(async()=>{let t=new Date().toISOString();await c(e.map(e=>({...e,status:"unindexed",createdAt:e.createdAt||t})))})},"updateDocument",0,function(e,t){return o(async()=>{let r=await l(),a=r.findIndex(t=>t.id===e);if(a<0)return;let n=r[a],i=void 0!==t.content?t.content.trim():n.content,o={...n,title:void 0!==t.title?t.title.trim()||"Untitled":n.title,content:i,charCount:i.length,url:void 0!==t.url?t.url||void 0:n.url,metadata:void 0!==t.metadata?t.metadata:n.metadata,status:"unindexed"};return r[a]=o,await c(r),o})},"updateDocumentsStatus",0,function(e,t){return o(async()=>{let r=await l(),a=new Set(e),n=!1;for(let e of r)a.has(e.id)&&(e.status=t,n=!0);n&&await c(r)})}])},700259,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(761095),n=e.i(666680),i=e.i(874533),o=e.i(812057),s=e.i(367165);let l=(0,o.promisify)(i.exec);async function c(e,t){return l(e,{timeout:t,env:{...process.env,PATH:`${process.env.PATH||""}:/usr/local/bin:/opt/homebrew/bin:/bin:/usr/bin`}})}let u=r.default.join(process.cwd(),".larkup"),d=r.default.join(u,"firecrawl-local.json"),p=r.default.join(u,"firecrawl","docker-compose.yml"),w="ragtoolkit-firecrawl";async function f(e){return new Promise((t,r)=>{let n=a.default.createServer();n.listen(e,()=>{let e=n.address().port;n.close(()=>t(e))}),n.on("error",a=>{"EADDRINUSE"===a.code?f(0===e?0:e+1).then(t,r):r(a)})})}async function m(){try{let e=r.default.join(process.cwd(),"proxies.txt"),a=(await t.promises.readFile(e,"utf8")).split("\n").map(e=>e.trim()).filter(e=>e.length>0);if(a.length>0){let e=a[Math.floor(Math.random()*a.length)].split(":");if(e.length>=4)return{server:`http://${e[0]}:${e[1]}`,username:e[2],password:e[3]}}}catch(e){}let e=await (0,s.readConfig)();return e.useScraperProxy&&e.scraperProxyServer?{server:e.scraperProxyServer,username:e.scraperProxyUsername,password:e.scraperProxyPassword}:null}let h={running:!1,endpoint:"http://localhost:3002",apiKey:"",port:3002,project:w};async function g(){try{let e=await t.promises.readFile(d,"utf8");return{...h,...JSON.parse(e)}}catch{return h}}async function y(e){return await t.promises.mkdir(u,{recursive:!0}),await t.promises.writeFile(d,JSON.stringify(e,null,2),"utf8"),e}async function v(){try{await c("docker --version")}catch(e){return console.error("DOCKER ERR:",e),{docker:!1,compose:null}}try{return await c("docker compose version"),{docker:!0,compose:"docker compose"}}catch(e){console.error("DOCKER COMPOSE ERR:",e)}try{return await c("docker-compose version"),{docker:!0,compose:"docker-compose"}}catch{return{docker:!0,compose:null}}}async function E(){let{docker:e,compose:t}=await v();return e?t?{docker:!0,compose:!0,message:"Docker is ready."}:{docker:!0,compose:!1,message:"Docker is installed but the Compose plugin was not found. Install `docker compose` to launch Firecrawl locally."}:{docker:!1,compose:!1,message:"Docker isn't available on this machine. Install Docker Desktop (or the Docker engine) and make sure it's running."}}function S(e,t,r){let a=r?[`PROXY_SERVER: "${r.server}"`,...r.username&&r.password?[`PROXY_USERNAME: "${r.username}"`,`PROXY_PASSWORD: "${r.password}"`]:[]]:[],n=['PORT: "3000"',...a].map(e=>` ${e}`).join("\n"),i=['PORT: "3002"',...a,'HOST: "0.0.0.0"','REDIS_URL: "redis://redis:6379"','REDIS_RATE_LIMIT_URL: "redis://redis:6379"','PLAYWRIGHT_MICROSERVICE_URL: "http://playwright-service:3000/scrape"','USE_DB_AUTHENTICATION: "false"',`TEST_API_KEY: "${e}"`,`BULL_AUTH_KEY: "${e}"`,'DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_RABBITMQ_URL: "amqp://user:password@rabbitmq:5672"'].map(e=>` ${e}`).join("\n");return`# Auto-generated by RAG Toolkit. Do not edit by hand.
2
2
  services:
3
3
  db:
4
4
  image: ghcr.io/firecrawl/nuq-postgres:latest
@@ -6,6 +6,11 @@ services:
6
6
  POSTGRES_USER: user
7
7
  POSTGRES_PASSWORD: password
8
8
  POSTGRES_DB: postgres
9
+ healthcheck:
10
+ test: ["CMD-SHELL", "pg_isready -U user -d postgres"]
11
+ interval: 5s
12
+ timeout: 5s
13
+ retries: 12
9
14
  restart: unless-stopped
10
15
 
11
16
  rabbitmq:
@@ -24,6 +29,11 @@ services:
24
29
  redis:
25
30
  image: redis:alpine
26
31
  command: redis-server --save "" --appendonly no
32
+ healthcheck:
33
+ test: ["CMD", "redis-cli", "ping"]
34
+ interval: 5s
35
+ timeout: 3s
36
+ retries: 12
27
37
  restart: unless-stopped
28
38
 
29
39
  playwright-service:
@@ -35,15 +45,17 @@ ${n}
35
45
  api:
36
46
  image: ghcr.io/firecrawl/firecrawl:latest
37
47
  depends_on:
38
- - db
39
- - rabbitmq
40
- - redis
41
- - playwright-service
48
+ db:
49
+ condition: service_healthy
50
+ rabbitmq:
51
+ condition: service_healthy
52
+ redis:
53
+ condition: service_healthy
42
54
  ports:
43
55
  - "${t}:3002"
44
56
  environment:
45
57
  ${i}
46
58
  restart: unless-stopped
47
- `}async function S(){let e=await E();if(!e.compose)return y({...await g(),running:!1,lastError:e.message});let{compose:a}=await v(),i=await g(),o=i.apiKey||`fc-local-${(0,n.randomUUID)()}`,s=i.port||3002,l=await m();await t.promises.mkdir(r.default.dirname(p),{recursive:!0}),await t.promises.writeFile(p,R(o,s,l),"utf8");try{await c(`${a} -p ${w} -f "${p}" up -d`,18e4)}catch(r){let e=r instanceof Error?r.message:"docker compose failed";if(!(e.includes("address already in use")||e.includes("Ports are not available")))return y({...i,apiKey:o,port:s,running:!1,lastError:e});try{s=await f(s+1),await t.promises.writeFile(p,R(o,s,l),"utf8"),await c(`${a} -p ${w} -f "${p}" up -d`,18e4)}catch(e){return y({...i,apiKey:o,port:s,running:!1,lastError:e instanceof Error?e.message:"docker compose retry failed"})}}let u=(0,t.existsSync)("/.dockerenv"),d=`http://${u?"host.docker.internal":"localhost"}:${s}`,h=await D(d,6e4);return y({running:h,endpoint:d,apiKey:o,port:s,project:w,startedAt:new Date().toISOString(),lastError:h?void 0:"Containers started but the API did not become healthy in time. It may still be warming up — try refreshing in a moment."})}async function b(){let{compose:e}=await v(),t=await g();if(e)try{await c(`${e} -p ${w} -f "${p}" down`,6e4)}catch{}return y({...t,running:!1,startedAt:void 0})}async function C(){let e=await g();if(!e.startedAt)return e;let t=await A(e.endpoint);return t!==e.running?y({...e,running:t}):e}async function A(e){try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(4e3)})).status>0}catch{return!1}}async function D(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await A(e))return!0;await new Promise(e=>setTimeout(e,3e3))}return!1}let k="http://firecrawl-api:3002";async function O(){return"true"===process.env.DOCKER_ENV||"1"===process.env.DOCKER_BUILD||(0,t.existsSync)("/.dockerenv")?{available:await A(k),endpoint:k}:{available:!1,endpoint:""}}async function I(){let{available:e}=await O();return e?y({running:!0,endpoint:k,apiKey:`fc-docker-${(0,n.randomUUID)()}`,port:3002,project:"docker-sibling",startedAt:new Date().toISOString()}):y({...h,running:!1,lastError:"Firecrawl sibling service is not running. Restart with: docker compose --profile crawler up"})}e.s(["checkDocker",0,E,"checkDockerSibling",0,O,"connectDockerSibling",0,I,"readLocalState",0,g,"refreshLocalStatus",0,C,"startLocal",0,S,"stopLocal",0,b])},304368,e=>{"use strict";var t=e.i(367165),r=e.i(700259);class a extends Error{status;constructor(e,t){super(e),this.status=t,this.name="FirecrawlError"}}async function n(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();if(e.running&&e.apiKey)return{base:`${e.endpoint}/v1`,key:e.apiKey,mode:"local"};throw new a("Local Firecrawl is selected but not running. Launch a local instance from the UI.",401)}let n=e.firecrawlApiKey;if(n)return{base:"https://api.firecrawl.dev/v1",key:n,mode:"cloud"};throw new a("Cloud Firecrawl is selected but no API key is configured. Set FIRECRAWL_API_KEY in Settings.",401)}async function i(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();return!!(e.running&&e.apiKey)}return!!e.firecrawlApiKey}async function o(e,t){let{base:r,key:i}=await n(),o=await fetch(`${r}${e}`,{...t,headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json",...t?.headers??{}},cache:"no-store"}),s=await o.text(),c=s?l(s):{};if(!o.ok)throw new a(c?.error||`Firecrawl request failed (${o.status})`,o.status);return c}async function s(e){let{key:t}=await n(),r=await fetch(e,{headers:{Authorization:`Bearer ${t}`},cache:"no-store"}),i=await r.text(),o=i?l(i):{};if(!r.ok)throw new a(o?.error||`Firecrawl request failed (${r.status})`,r.status);return o}function l(e){try{return JSON.parse(e)}catch{return{}}}async function c(e,t=10){return((await o("/search",{method:"POST",body:JSON.stringify({query:e,limit:t})})).data??[]).map(e=>({url:e.url,title:e.title||e.url,description:e.description}))}let u={waitFor:1e4,onlyMainContent:!1,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Accept-Language":"en-US,en;q=0.9","Sec-Ch-Ua":'"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',"Sec-Ch-Ua-Mobile":"?0","Sec-Ch-Ua-Platform":'"Windows"'}};async function d(e){let t=(await o("/scrape",{method:"POST",body:JSON.stringify({url:e,formats:["markdown"],...u})})).data??{};return{url:t.metadata?.sourceURL||e,title:t.metadata?.title||t.metadata?.ogTitle||e,markdown:t.markdown??""}}async function p(e,t){let r=await o("/crawl",{method:"POST",body:JSON.stringify({url:e,limit:t,allowExternalLinks:!1,scrapeOptions:{...u,formats:["markdown"],onlyMainContent:!0}})});if(!r.id)throw new a("Firecrawl did not return a crawl id");return r.id}async function w(e,t=!1){let r=t?await s(e):await o(`/crawl/${e}`,{method:"GET"});return{state:r.status??"scraping",total:r.total??0,completed:r.completed??0,next:r.next,pages:(r.data??[]).map(e=>({url:e.metadata?.sourceURL||e.metadata?.url||"",title:e.metadata?.title||e.metadata?.sourceURL||"Untitled",markdown:e.markdown??""}))}}async function f(e){try{await o(`/crawl/${e}`,{method:"DELETE"})}catch{}}e.s(["FirecrawlError",0,a,"cancelCrawl",0,f,"getCrawlStatus",0,w,"isFirecrawlConfigured",0,i,"scrapePage",0,d,"searchWeb",0,c,"startCrawl",0,p])},798898,490117,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(192441);let n=Promise.resolve();function i(e){let t=n.then(e,e);return n=t.catch(()=>{}),t}async function o(e){let t=e?await (0,a.requireDataDir)():await (0,a.getDataDir)();return t?r.default.join(t,"jobs.json"):null}async function s(){let e=await o(!1);if(!e)return[];try{let r=await t.promises.readFile(e,"utf8");return JSON.parse(r)}catch{return[]}}async function l(e){let r=await o(!0);r&&await t.promises.writeFile(r,JSON.stringify(e,null,2),"utf8")}async function c(e){return(await s()).find(t=>t.id===e)}function u(e,t){return i(async()=>{let r=await s(),a=r.findIndex(t=>t.id===e);if(a<0)return;let n={...t(r[a]),updatedAt:new Date().toISOString()};return r[a]=n,await l(r),n})}e.s(["deleteJob",0,function(e){return i(async()=>{let t=await s();await l(t.filter(t=>t.id!==e))})},"getJob",0,c,"readJobs",0,s,"saveJob",0,function(e){return i(async()=>{let t=await s(),r=t.findIndex(t=>t.id===e.id),a={...e,updatedAt:new Date().toISOString()};return r>=0?t[r]=a:t.unshift(a),await l(t),a})},"updateJob",0,u],798898);var d=e.i(705252),p=e.i(304368);let w=new Set;function f(e){if(!e)return!1;let t=e.toLowerCase();return t.includes("verification successful. waiting for")||t.includes("please verify you are a human")||t.includes("checking if the site connection is secure")||t.includes("just a moment...")||t.includes("enable javascript and cookies to continue")}async function m(e,t){try{let r=await (0,p.scrapePage)(t.url);if(f(r.markdown))throw Error("Scraping blocked by anti-bot protection (e.g. Cloudflare)");return{added:await (0,d.addCrawledDocuments)(e,[{title:r.title,url:r.url,content:r.markdown,source:"scrape"}]),target:{...t,status:"completed",pagesCrawled:+!!r.markdown}}}catch(e){return{added:0,target:{...t,status:"failed",error:e instanceof Error?e.message:"scrape failed"}}}}async function h(e,t,r){try{if(!t.firecrawlId){let e=await (0,p.startCrawl)(t.url,r);return{added:0,target:{...t,firecrawlId:e,status:"running"}}}let a=t.firecrawlId,n=!1,i=0,o=0,s=t.pagesCrawled,l="running",c=[];for(;i<5;){let e=await (0,p.getCrawlStatus)(a,n);for(let t of(s=e.completed||s,e.pages))f(t.markdown)||c.push({title:t.title,url:t.url,content:t.markdown,source:"scrape"});if(i++,"completed"===e.state?l="completed":"failed"===e.state?l="failed":"cancelled"===e.state&&(l="cancelled"),e.next)a=e.next,n=!0;else break}return c.length&&(o=await (0,d.addCrawledDocuments)(e,c)),{added:o,target:{...t,status:l,pagesCrawled:s}}}catch(e){return{added:0,target:{...t,status:"failed",error:e instanceof Error?e.message:"crawl failed"}}}}async function g(e){let t=await c(e);if(t){if(["completed","failed","cancelled"].includes(t.status)||w.has(e))return t;w.add(e);try{let r=await Promise.all(t.targets.map(r=>"completed"===r.status||"failed"===r.status?Promise.resolve({target:r,added:0}):"page"===r.scope?m(e,r):h(e,r,t.pageLimit))),a=r.map(e=>e.target),n=a.reduce((e,t)=>e+t.pagesCrawled,0);return await u(e,e=>({...e,targets:a,pagesCrawled:n,docCount:e.docCount+r.reduce((e,t)=>e+t.added,0),status:a.every(e=>"completed"===e.status)?"completed":a.every(e=>"failed"===e.status)?"failed":a.every(e=>"completed"===e.status||"failed"===e.status)&&a.some(e=>"completed"===e.status)?"completed":"running"}))}finally{w.delete(e)}}}async function y(e){let t=await c(e);if(t)return await Promise.all(t.targets.filter(e=>e.firecrawlId&&"running"===e.status).map(e=>(0,p.cancelCrawl)(e.firecrawlId))),u(e,e=>({...e,status:"cancelled",targets:e.targets.map(e=>"running"===e.status||"queued"===e.status?{...e,status:"cancelled"}:e)}))}e.s(["cancelJob",0,y,"syncJob",0,g],490117)},962044,e=>{"use strict";var t=e.i(239441),r=e.i(449055),a=e.i(391328),n=e.i(6352),i=e.i(746789),o=e.i(423437),s=e.i(178820),l=e.i(569191),c=e.i(576251),u=e.i(199962),d=e.i(547545),p=e.i(664046),w=e.i(235691),f=e.i(298907),m=e.i(110763),h=e.i(193695);e.i(673243);var g=e.i(236167),y=e.i(766576),v=e.i(798898),E=e.i(490117);async function R(e,{params:t}){let{id:r}=await t,a=await (0,E.syncJob)(r);return a?y.NextResponse.json({job:a}):y.NextResponse.json({error:"Job not found."},{status:404})}async function S(e,{params:t}){let{id:r}=await t;if(new URL(e.url).searchParams.get("remove"))return await (0,v.deleteJob)(r),y.NextResponse.json({ok:!0});if(!await (0,v.getJob)(r))return y.NextResponse.json({error:"Job not found."},{status:404});let a=await (0,E.cancelJob)(r);return y.NextResponse.json({job:a})}e.s(["DELETE",0,S,"GET",0,R,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],934385);var b=e.i(934385);let C=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/jobs/[id]/route",pathname:"/api/jobs/[id]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/jobs/[id]/route.ts",nextConfigOutput:"standalone",userland:b,...{}}),{workAsyncStorage:A,workUnitAsyncStorage:D,serverHooks:k}=C;async function O(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),C.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/jobs/[id]/route";y=y.replace(/\/index$/,"")||"/";let v=await C.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:E,deploymentId:R,params:S,nextConfig:b,parsedUrl:A,isDraftMode:D,prerenderManifest:k,routerServerContext:O,isOnDemandRevalidate:I,revalidateOnlyGenerated:T,resolvedPathname:x,clientReferenceManifest:P,serverActionsManifest:_}=v,U=(0,s.normalizeAppPath)(y),N=!!(k.dynamicRoutes[U]||k.routes[x]),$=async()=>((null==O?void 0:O.render404)?await O.render404(e,t,A,!1):t.end("This page could not be found"),null);if(N&&!D){let e=!!k.routes[x],t=k.dynamicRoutes[U];if(t&&!1===t.fallback&&!e){if(b.adapterPath)return await $();throw new h.NoFallbackError}}let F=null;!N||C.isDev||D||(F="/index"===(F=x)?"/":F);let L=!0===C.isDev||!N,j=N&&!L;_&&P&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:P,serverActionsManifest:_});let q=e.method||"GET",M=(0,i.getTracer)(),J=M.getActiveScopeSpan(),K=!!(null==O?void 0:O.isWrappedByNextServer),H=!!(0,n.getRequestMeta)(e,"minimalMode"),B=(0,n.getRequestMeta)(e,"incrementalCache")||await C.getIncrementalCache(e,b,k,H);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let G={params:S,previewProps:k.preview,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts},cacheComponents:!!b.cacheComponents,supportsDynamicResponse:L,incrementalCache:B,cacheLifeProfiles:b.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>C.onRequestError(e,t,a,n,O)},sharedContext:{buildId:E,deploymentId:R}},W=new l.NodeNextRequest(e),Y=new l.NodeNextResponse(t),V=c.NextRequestAdapter.fromNodeNextRequest(W,(0,c.signalFromNodeResponse)(t));try{let n,o=async e=>C.handle(V,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${q} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${q} ${y}`)}),s=async n=>{var i,s;let l=async({previousCacheEntry:r})=>{try{if(!H&&I&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(n);e.fetchMetrics=G.renderOpts.fetchMetrics;let s=G.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let l=G.renderOpts.collectedTags;if(!N)return await (0,p.sendResponse)(W,Y,i,G.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,w.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await C.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:I})},!1,O),t}},c=await C.handleResponse({req:e,nextConfig:b,cacheKey:F,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:I,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:H});if(!N)return null;if((null==c||null==(i=c.value)?void 0:i.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(s=c.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});H||t.setHeader("x-nextjs-cache",I?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),D&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,w.fromNodeOutgoingHttpHeaders)(c.value.headers);return H&&N||u.delete(m.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,f.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(W,Y,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};K&&J?await s(J):(n=M.getActiveScopeSpan(),await M.withPropagatedContext(e.headers,()=>M.trace(u.BaseServerSpan.handleRequest,{spanName:`${q} ${y}`,kind:i.SpanKind.SERVER,attributes:{"http.method":q,"http.target":e.url}},s),void 0,!K))}catch(t){if(t instanceof h.NoFallbackError||await C.onRequestError(e,t,{routerKind:"App Router",routePath:U,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:I})},!1,O),N)throw t;return await (0,p.sendResponse)(W,Y,new Response(null,{status:500})),null}}e.s(["handler",0,O,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:A,workUnitAsyncStorage:D})},"routeModule",0,C,"serverHooks",0,k,"workAsyncStorage",0,A,"workUnitAsyncStorage",0,D],962044)}];
59
+ `}async function R(){let e=await E();if(!e.compose)return y({...await g(),running:!1,lastError:e.message});let{compose:a}=await v(),i=await g(),o=i.apiKey||`fc-local-${(0,n.randomUUID)()}`,s=i.port||3002,l=await m();await t.promises.mkdir(r.default.dirname(p),{recursive:!0}),await t.promises.writeFile(p,S(o,s,l),"utf8");try{await c(`${a} -p ${w} -f "${p}" up -d`,18e4)}catch(r){let e=r instanceof Error?r.message:"docker compose failed";if(!(e.includes("address already in use")||e.includes("Ports are not available")))return y({...i,apiKey:o,port:s,running:!1,lastError:e});try{s=await f(s+1),await t.promises.writeFile(p,S(o,s,l),"utf8"),await c(`${a} -p ${w} -f "${p}" up -d`,18e4)}catch(e){return y({...i,apiKey:o,port:s,running:!1,lastError:e instanceof Error?e.message:"docker compose retry failed"})}}let u=(0,t.existsSync)("/.dockerenv"),d=`http://${u?"host.docker.internal":"localhost"}:${s}`,h=await A(d,9e4);return y({running:h,endpoint:d,apiKey:o,port:s,project:w,startedAt:new Date().toISOString(),lastError:h?void 0:"Containers started but the API did not become healthy in time. It may still be warming up — try refreshing in a moment."})}async function b(){let{compose:e}=await v(),t=await g();if(e)try{await c(`${e} -p ${w} -f "${p}" down`,6e4)}catch{}return y({...t,running:!1,startedAt:void 0})}async function C(){let e=await g();if(!e.startedAt)return e;let t=await D(e.endpoint);return t!==e.running?y({...e,running:t}):e}async function D(e){try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(4e3)})).status>0}catch{return!1}}async function A(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await D(e))return!0;await new Promise(e=>setTimeout(e,3e3))}return!1}let k="http://firecrawl-api:3002";async function T(){return"true"===process.env.DOCKER_ENV||"1"===process.env.DOCKER_BUILD||(0,t.existsSync)("/.dockerenv")?{available:await D(k),endpoint:k}:{available:!1,endpoint:""}}async function O(){let{available:e}=await T();return e?y({running:!0,endpoint:k,apiKey:`fc-docker-${(0,n.randomUUID)()}`,port:3002,project:"docker-sibling",startedAt:new Date().toISOString()}):y({...h,running:!1,lastError:"The web crawler service is not available in this Docker deployment."})}e.s(["checkDocker",0,E,"checkDockerSibling",0,T,"connectDockerSibling",0,O,"readLocalState",0,g,"refreshLocalStatus",0,C,"startLocal",0,R,"stopLocal",0,b])},304368,e=>{"use strict";var t=e.i(367165),r=e.i(700259);class a extends Error{status;constructor(e,t){super(e),this.status=t,this.name="FirecrawlError"}}async function n(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();if(e.running&&e.apiKey)return{base:`${e.endpoint}/v1`,key:e.apiKey,mode:"local"};throw new a("The selected web crawler is not running. Choose a crawler provider in Settings.",401)}let n=e.firecrawlApiKey;if(n)return{base:"https://api.firecrawl.dev/v1",key:n,mode:"cloud"};throw new a("The cloud web crawler needs an API key. Add it in Settings.",401)}async function i(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();return!!(e.running&&e.apiKey)}return!!e.firecrawlApiKey}async function o(e,t){let{base:r,key:i}=await n(),o=await fetch(`${r}${e}`,{...t,headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json",...t?.headers??{}},cache:"no-store"}),s=await o.text(),c=s?l(s):{};if(!o.ok)throw new a(c?.error||`Firecrawl request failed (${o.status})`,o.status);return c}async function s(e){let{key:t}=await n(),r=await fetch(e,{headers:{Authorization:`Bearer ${t}`},cache:"no-store"}),i=await r.text(),o=i?l(i):{};if(!r.ok)throw new a(o?.error||`Firecrawl request failed (${r.status})`,r.status);return o}function l(e){try{return JSON.parse(e)}catch{return{}}}async function c(e,t=10){return((await o("/search",{method:"POST",body:JSON.stringify({query:e,limit:t})})).data??[]).map(e=>({url:e.url,title:e.title||e.url,description:e.description}))}let u={waitFor:1e4,onlyMainContent:!1,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Accept-Language":"en-US,en;q=0.9","Sec-Ch-Ua":'"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',"Sec-Ch-Ua-Mobile":"?0","Sec-Ch-Ua-Platform":'"Windows"'}};async function d(e){let t=(await o("/scrape",{method:"POST",body:JSON.stringify({url:e,formats:["markdown"],...u})})).data??{};return{url:t.metadata?.sourceURL||e,title:t.metadata?.title||t.metadata?.ogTitle||e,markdown:t.markdown??""}}async function p(e,t){let r=await o("/crawl",{method:"POST",body:JSON.stringify({url:e,limit:t,allowExternalLinks:!1,scrapeOptions:{...u,formats:["markdown"],onlyMainContent:!0}})});if(!r.id)throw new a("Firecrawl did not return a crawl id");return r.id}async function w(e,t=!1){let r=t?await s(e):await o(`/crawl/${e}`,{method:"GET"});return{state:r.status??"scraping",total:r.total??0,completed:r.completed??0,next:r.next,pages:(r.data??[]).map(e=>({url:e.metadata?.sourceURL||e.metadata?.url||"",title:e.metadata?.title||e.metadata?.sourceURL||"Untitled",markdown:e.markdown??""}))}}async function f(e){try{await o(`/crawl/${e}`,{method:"DELETE"})}catch{}}e.s(["FirecrawlError",0,a,"cancelCrawl",0,f,"getCrawlStatus",0,w,"isFirecrawlConfigured",0,i,"scrapePage",0,d,"searchWeb",0,c,"startCrawl",0,p])},798898,490117,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(192441);let n=Promise.resolve();function i(e){let t=n.then(e,e);return n=t.catch(()=>{}),t}async function o(e){let t=e?await (0,a.requireDataDir)():await (0,a.getDataDir)();return t?r.default.join(t,"jobs.json"):null}async function s(){let e=await o(!1);if(!e)return[];try{let r=await t.promises.readFile(e,"utf8");return JSON.parse(r)}catch{return[]}}async function l(e){let r=await o(!0);r&&await t.promises.writeFile(r,JSON.stringify(e,null,2),"utf8")}async function c(e){return(await s()).find(t=>t.id===e)}function u(e,t){return i(async()=>{let r=await s(),a=r.findIndex(t=>t.id===e);if(a<0)return;let n={...t(r[a]),updatedAt:new Date().toISOString()};return r[a]=n,await l(r),n})}e.s(["deleteJob",0,function(e){return i(async()=>{let t=await s();await l(t.filter(t=>t.id!==e))})},"getJob",0,c,"readJobs",0,s,"saveJob",0,function(e){return i(async()=>{let t=await s(),r=t.findIndex(t=>t.id===e.id),a={...e,updatedAt:new Date().toISOString()};return r>=0?t[r]=a:t.unshift(a),await l(t),a})},"updateJob",0,u],798898);var d=e.i(705252),p=e.i(304368);let w=new Set;function f(e){if(!e)return!1;let t=e.toLowerCase();return t.includes("verification successful. waiting for")||t.includes("please verify you are a human")||t.includes("checking if the site connection is secure")||t.includes("just a moment...")||t.includes("enable javascript and cookies to continue")}async function m(e,t){try{let r=await (0,p.scrapePage)(t.url);if(f(r.markdown))throw Error("Scraping blocked by anti-bot protection (e.g. Cloudflare)");return{added:await (0,d.addCrawledDocuments)(e,[{title:r.title,url:r.url,content:r.markdown,source:"scrape"}]),target:{...t,status:"completed",pagesCrawled:+!!r.markdown}}}catch(e){return{added:0,target:{...t,status:"failed",error:e instanceof Error?e.message:"scrape failed"}}}}async function h(e,t,r){try{if(!t.firecrawlId){let e=await (0,p.startCrawl)(t.url,r);return{added:0,target:{...t,firecrawlId:e,status:"running"}}}let a=t.firecrawlId,n=!1,i=0,o=0,s=t.pagesCrawled,l="running",c=[];for(;i<5;){let e=await (0,p.getCrawlStatus)(a,n);for(let t of(s=e.completed||s,e.pages))f(t.markdown)||c.push({title:t.title,url:t.url,content:t.markdown,source:"scrape"});if(i++,"completed"===e.state?l="completed":"failed"===e.state?l="failed":"cancelled"===e.state&&(l="cancelled"),e.next)a=e.next,n=!0;else break}return c.length&&(o=await (0,d.addCrawledDocuments)(e,c)),{added:o,target:{...t,status:l,pagesCrawled:s}}}catch(e){return{added:0,target:{...t,status:"failed",error:e instanceof Error?e.message:"crawl failed"}}}}async function g(e){let t=await c(e);if(t){if(["completed","failed","cancelled"].includes(t.status)||w.has(e))return t;w.add(e);try{let r=await Promise.all(t.targets.map(r=>"completed"===r.status||"failed"===r.status?Promise.resolve({target:r,added:0}):"page"===r.scope?m(e,r):h(e,r,t.pageLimit))),a=r.map(e=>e.target),n=a.reduce((e,t)=>e+t.pagesCrawled,0);return await u(e,e=>({...e,targets:a,pagesCrawled:n,docCount:e.docCount+r.reduce((e,t)=>e+t.added,0),status:a.every(e=>"completed"===e.status)?"completed":a.every(e=>"failed"===e.status)?"failed":a.every(e=>"completed"===e.status||"failed"===e.status)&&a.some(e=>"completed"===e.status)?"completed":"running"}))}finally{w.delete(e)}}}async function y(e){let t=await c(e);if(t)return await Promise.all(t.targets.filter(e=>e.firecrawlId&&"running"===e.status).map(e=>(0,p.cancelCrawl)(e.firecrawlId))),u(e,e=>({...e,status:"cancelled",targets:e.targets.map(e=>"running"===e.status||"queued"===e.status?{...e,status:"cancelled"}:e)}))}e.s(["cancelJob",0,y,"syncJob",0,g],490117)},962044,e=>{"use strict";var t=e.i(239441),r=e.i(449055),a=e.i(391328),n=e.i(6352),i=e.i(746789),o=e.i(423437),s=e.i(178820),l=e.i(569191),c=e.i(576251),u=e.i(199962),d=e.i(547545),p=e.i(664046),w=e.i(235691),f=e.i(298907),m=e.i(110763),h=e.i(193695);e.i(673243);var g=e.i(236167),y=e.i(766576),v=e.i(798898),E=e.i(490117);async function S(e,{params:t}){let{id:r}=await t,a=await (0,E.syncJob)(r);return a?y.NextResponse.json({job:a}):y.NextResponse.json({error:"Job not found."},{status:404})}async function R(e,{params:t}){let{id:r}=await t;if(new URL(e.url).searchParams.get("remove"))return await (0,v.deleteJob)(r),y.NextResponse.json({ok:!0});if(!await (0,v.getJob)(r))return y.NextResponse.json({error:"Job not found."},{status:404});let a=await (0,E.cancelJob)(r);return y.NextResponse.json({job:a})}e.s(["DELETE",0,R,"GET",0,S,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],934385);var b=e.i(934385);let C=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/jobs/[id]/route",pathname:"/api/jobs/[id]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/jobs/[id]/route.ts",nextConfigOutput:"standalone",userland:b,...{}}),{workAsyncStorage:D,workUnitAsyncStorage:A,serverHooks:k}=C;async function T(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),C.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/jobs/[id]/route";y=y.replace(/\/index$/,"")||"/";let v=await C.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:E,deploymentId:S,params:R,nextConfig:b,parsedUrl:D,isDraftMode:A,prerenderManifest:k,routerServerContext:T,isOnDemandRevalidate:O,revalidateOnlyGenerated:I,resolvedPathname:x,clientReferenceManifest:_,serverActionsManifest:P}=v,U=(0,s.normalizeAppPath)(y),N=!!(k.dynamicRoutes[U]||k.routes[x]),$=async()=>((null==T?void 0:T.render404)?await T.render404(e,t,D,!1):t.end("This page could not be found"),null);if(N&&!A){let e=!!k.routes[x],t=k.dynamicRoutes[U];if(t&&!1===t.fallback&&!e){if(b.adapterPath)return await $();throw new h.NoFallbackError}}let L=null;!N||C.isDev||A||(L="/index"===(L=x)?"/":L);let j=!0===C.isDev||!N,F=N&&!j;P&&_&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:_,serverActionsManifest:P});let q=e.method||"GET",M=(0,i.getTracer)(),J=M.getActiveScopeSpan(),H=!!(null==T?void 0:T.isWrappedByNextServer),K=!!(0,n.getRequestMeta)(e,"minimalMode"),B=(0,n.getRequestMeta)(e,"incrementalCache")||await C.getIncrementalCache(e,b,k,K);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let G={params:R,previewProps:k.preview,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts},cacheComponents:!!b.cacheComponents,supportsDynamicResponse:j,incrementalCache:B,cacheLifeProfiles:b.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>C.onRequestError(e,t,a,n,T)},sharedContext:{buildId:E,deploymentId:S}},W=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),X=c.NextRequestAdapter.fromNodeNextRequest(W,(0,c.signalFromNodeResponse)(t));try{let n,o=async e=>C.handle(X,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${q} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${q} ${y}`)}),s=async n=>{var i,s;let l=async({previousCacheEntry:r})=>{try{if(!K&&O&&I&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(n);e.fetchMetrics=G.renderOpts.fetchMetrics;let s=G.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let l=G.renderOpts.collectedTags;if(!N)return await (0,p.sendResponse)(W,V,i,G.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,w.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await C.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:O})},!1,T),t}},c=await C.handleResponse({req:e,nextConfig:b,cacheKey:L,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:I,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:K});if(!N)return null;if((null==c||null==(i=c.value)?void 0:i.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(s=c.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});K||t.setHeader("x-nextjs-cache",O?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,w.fromNodeOutgoingHttpHeaders)(c.value.headers);return K&&N||u.delete(m.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,f.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(W,V,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};H&&J?await s(J):(n=M.getActiveScopeSpan(),await M.withPropagatedContext(e.headers,()=>M.trace(u.BaseServerSpan.handleRequest,{spanName:`${q} ${y}`,kind:i.SpanKind.SERVER,attributes:{"http.method":q,"http.target":e.url}},s),void 0,!H))}catch(t){if(t instanceof h.NoFallbackError||await C.onRequestError(e,t,{routerKind:"App Router",routePath:U,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:O})},!1,T),N)throw t;return await (0,p.sendResponse)(W,V,new Response(null,{status:500})),null}}e.s(["handler",0,T,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:D,workUnitAsyncStorage:A})},"routeModule",0,C,"serverHooks",0,k,"workAsyncStorage",0,D,"workUnitAsyncStorage",0,A],962044)}];
48
60
 
49
61
  //# sourceMappingURL=%5Broot-of-the-server%5D__0a_0ywc._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[367165,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(638725),n=e.i(192441);async function i(){let e=await (0,n.getDataDir)();if(!e)return a.DEFAULT_CONFIG;try{let n=await t.promises.readFile(r.default.join(e,"config.json"),"utf8"),i=JSON.parse(n),o=i.customEmbeddings,s=i.embeddingModelId;if(i.customEmbedding&&!o?.length){let e=i.customEmbedding;o=[e],"custom"===s&&(s=`custom:${e.modelName}`)}let l={...a.DEFAULT_CONFIG,...i,embeddingModelId:s??a.DEFAULT_CONFIG.embeddingModelId,customEmbeddings:o,chunking:{...a.DEFAULT_CONFIG.chunking,...i.chunking},storeConfig:{...a.DEFAULT_CONFIG.storeConfig,...i.storeConfig}};return delete l.customEmbedding,l}catch{return a.DEFAULT_CONFIG}}async function o(e){let a=await (0,n.requireDataDir)(),i={...e,updatedAt:new Date().toISOString()};return await t.promises.writeFile(r.default.join(a,"config.json"),JSON.stringify(i,null,2),"utf8"),i}e.s(["readConfig",0,i,"writeConfig",0,o])},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},705252,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(666680),n=e.i(192441);let i=Promise.resolve();function o(e){let t=i.then(e,e);return i=t.catch(()=>{}),t}async function s(e){let t=e?await (0,n.requireDataDir)():await (0,n.getDataDir)();return t?r.default.join(t,"documents.json"):null}async function l(){let e=await s(!1);if(!e)return[];try{let r=await t.promises.readFile(e,"utf8"),a=JSON.parse(r);if(!Array.isArray(a))throw Error(`Invalid document store at ${e}: expected a JSON array.`);return a}catch(e){if(e?.code==="ENOENT")return[];throw e}}async function c(e){let n=await s(!0);if(!n)return;let i=r.default.join(r.default.dirname(n),`.${r.default.basename(n)}.${process.pid}.${(0,a.randomUUID)()}.tmp`);try{await t.promises.writeFile(i,JSON.stringify(e,null,2),"utf8"),await t.promises.rename(i,n)}catch(e){throw await t.promises.unlink(i).catch(()=>{}),e}}function u(e){let t=e.content.trim();return{id:e.id??(0,a.randomUUID)(),title:e.title.trim()||"Untitled",url:e.url,source:e.source,content:t,charCount:t.length,jobId:e.jobId,metadata:e.metadata,status:"unindexed",createdAt:new Date().toISOString()}}async function d(){let e=await l(),t=e.reduce((e,t)=>e+t.charCount,0);return{docCount:e.length,charCount:t,bySource:e.reduce((e,t)=>(e[t.source]=(e[t.source]??0)+1,e),{})}}e.s(["addCrawledDocuments",0,function(e,t){return o(async()=>{let r=await l(),a=new Set(r.filter(e=>e.url).map(e=>e.url)),n=0;for(let i of t)!(i.url&&a.has(i.url))&&i.content.trim()&&(r.push(u({...i,jobId:e})),i.url&&a.add(i.url),n++);return n>0&&await c(r),n})},"addDocument",0,function(e){return o(async()=>{let t=await l(),r=u(e);return t.push(r),await c(t),r})},"addDocuments",0,function(e){return o(async()=>{if(0===e.length)return[];let t=await l(),r=e.map(u);return t.push(...r),await c(t),r})},"clearDocuments",0,function(){return o(async()=>{await c([])})},"corpusStats",0,d,"deleteDocument",0,function(e){return o(async()=>{let t=await l();await c(t.filter(t=>t.id!==e))})},"deleteDocuments",0,function(e){return o(async()=>{let t=await l(),r=new Set(e);await c(t.filter(e=>!r.has(e.id)))})},"readDocuments",0,l,"replaceDocuments",0,function(e){return o(async()=>{let t=new Date().toISOString();await c(e.map(e=>({...e,status:"unindexed",createdAt:e.createdAt||t})))})},"updateDocument",0,function(e,t){return o(async()=>{let r=await l(),a=r.findIndex(t=>t.id===e);if(a<0)return;let n=r[a],i=void 0!==t.content?t.content.trim():n.content,o={...n,title:void 0!==t.title?t.title.trim()||"Untitled":n.title,content:i,charCount:i.length,url:void 0!==t.url?t.url||void 0:n.url,metadata:void 0!==t.metadata?t.metadata:n.metadata,status:"unindexed"};return r[a]=o,await c(r),o})},"updateDocumentsStatus",0,function(e,t){return o(async()=>{let r=await l(),a=new Set(e),n=!1;for(let e of r)a.has(e.id)&&(e.status=t,n=!0);n&&await c(r)})}])},700259,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(761095),n=e.i(666680),i=e.i(874533),o=e.i(812057),s=e.i(367165);let l=(0,o.promisify)(i.exec);async function c(e,t){return l(e,{timeout:t,env:{...process.env,PATH:`${process.env.PATH||""}:/usr/local/bin:/opt/homebrew/bin:/bin:/usr/bin`}})}let u=r.default.join(process.cwd(),".larkup"),d=r.default.join(u,"firecrawl-local.json"),p=r.default.join(u,"firecrawl","docker-compose.yml"),w="ragtoolkit-firecrawl";async function f(e){return new Promise((t,r)=>{let n=a.default.createServer();n.listen(e,()=>{let e=n.address().port;n.close(()=>t(e))}),n.on("error",a=>{"EADDRINUSE"===a.code?f(0===e?0:e+1).then(t,r):r(a)})})}async function m(){try{let e=r.default.join(process.cwd(),"proxies.txt"),a=(await t.promises.readFile(e,"utf8")).split("\n").map(e=>e.trim()).filter(e=>e.length>0);if(a.length>0){let e=a[Math.floor(Math.random()*a.length)].split(":");if(e.length>=4)return{server:`http://${e[0]}:${e[1]}`,username:e[2],password:e[3]}}}catch(e){}let e=await (0,s.readConfig)();return e.useScraperProxy&&e.scraperProxyServer?{server:e.scraperProxyServer,username:e.scraperProxyUsername,password:e.scraperProxyPassword}:null}let h={running:!1,endpoint:"http://localhost:3002",apiKey:"",port:3002,project:w};async function g(){try{let e=await t.promises.readFile(d,"utf8");return{...h,...JSON.parse(e)}}catch{return h}}async function y(e){return await t.promises.mkdir(u,{recursive:!0}),await t.promises.writeFile(d,JSON.stringify(e,null,2),"utf8"),e}async function v(){try{await c("docker --version")}catch(e){return console.error("DOCKER ERR:",e),{docker:!1,compose:null}}try{return await c("docker compose version"),{docker:!0,compose:"docker compose"}}catch(e){console.error("DOCKER COMPOSE ERR:",e)}try{return await c("docker-compose version"),{docker:!0,compose:"docker-compose"}}catch{return{docker:!0,compose:null}}}async function S(){let{docker:e,compose:t}=await v();return e?t?{docker:!0,compose:!0,message:"Docker is ready."}:{docker:!0,compose:!1,message:"Docker is installed but the Compose plugin was not found. Install `docker compose` to launch Firecrawl locally."}:{docker:!1,compose:!1,message:"Docker isn't available on this machine. Install Docker Desktop (or the Docker engine) and make sure it's running."}}function E(e,t,r){let a=r?[`PROXY_SERVER: "${r.server}"`,...r.username&&r.password?[`PROXY_USERNAME: "${r.username}"`,`PROXY_PASSWORD: "${r.password}"`]:[]]:[],n=['PORT: "3000"',...a].map(e=>` ${e}`).join("\n"),i=['PORT: "3002"',...a,'HOST: "0.0.0.0"','REDIS_URL: "redis://redis:6379"','REDIS_RATE_LIMIT_URL: "redis://redis:6379"','PLAYWRIGHT_MICROSERVICE_URL: "http://playwright-service:3000/scrape"','USE_DB_AUTHENTICATION: "false"',`TEST_API_KEY: "${e}"`,`BULL_AUTH_KEY: "${e}"`,'DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_RABBITMQ_URL: "amqp://user:password@rabbitmq:5672"'].map(e=>` ${e}`).join("\n");return`# Auto-generated by RAG Toolkit. Do not edit by hand.
1
+ module.exports=[367165,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(638725),n=e.i(192441);async function i(){let e=await (0,n.getDataDir)();if(!e)return a.DEFAULT_CONFIG;try{let n=await t.promises.readFile(r.default.join(e,"config.json"),"utf8"),i=JSON.parse(n),s=i.customEmbeddings,o=i.embeddingModelId;if(i.customEmbedding&&!s?.length){let e=i.customEmbedding;s=[e],"custom"===o&&(o=`custom:${e.modelName}`)}let l={...a.DEFAULT_CONFIG,...i,embeddingModelId:o??a.DEFAULT_CONFIG.embeddingModelId,customEmbeddings:s,chunking:{...a.DEFAULT_CONFIG.chunking,...i.chunking},storeConfig:{...a.DEFAULT_CONFIG.storeConfig,...i.storeConfig}};return delete l.customEmbedding,l}catch{return a.DEFAULT_CONFIG}}async function s(e){let a=await (0,n.requireDataDir)(),i={...e,updatedAt:new Date().toISOString()};return await t.promises.writeFile(r.default.join(a,"config.json"),JSON.stringify(i,null,2),"utf8"),i}e.s(["readConfig",0,i,"writeConfig",0,s])},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},705252,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(666680),n=e.i(192441);let i=Promise.resolve();function s(e){let t=i.then(e,e);return i=t.catch(()=>{}),t}async function o(e){let t=e?await (0,n.requireDataDir)():await (0,n.getDataDir)();return t?r.default.join(t,"documents.json"):null}async function l(){let e=await o(!1);if(!e)return[];try{let r=await t.promises.readFile(e,"utf8"),a=JSON.parse(r);if(!Array.isArray(a))throw Error(`Invalid document store at ${e}: expected a JSON array.`);return a}catch(e){if(e?.code==="ENOENT")return[];throw e}}async function c(e){let n=await o(!0);if(!n)return;let i=r.default.join(r.default.dirname(n),`.${r.default.basename(n)}.${process.pid}.${(0,a.randomUUID)()}.tmp`);try{await t.promises.writeFile(i,JSON.stringify(e,null,2),"utf8"),await t.promises.rename(i,n)}catch(e){throw await t.promises.unlink(i).catch(()=>{}),e}}function u(e){let t=e.content.trim();return{id:e.id??(0,a.randomUUID)(),title:e.title.trim()||"Untitled",url:e.url,source:e.source,content:t,charCount:t.length,jobId:e.jobId,metadata:e.metadata,status:"unindexed",createdAt:new Date().toISOString()}}async function d(){let e=await l(),t=e.reduce((e,t)=>e+t.charCount,0);return{docCount:e.length,charCount:t,bySource:e.reduce((e,t)=>(e[t.source]=(e[t.source]??0)+1,e),{})}}e.s(["addCrawledDocuments",0,function(e,t){return s(async()=>{let r=await l(),a=new Set(r.filter(e=>e.url).map(e=>e.url)),n=0;for(let i of t)!(i.url&&a.has(i.url))&&i.content.trim()&&(r.push(u({...i,jobId:e})),i.url&&a.add(i.url),n++);return n>0&&await c(r),n})},"addDocument",0,function(e){return s(async()=>{let t=await l(),r=u(e);return t.push(r),await c(t),r})},"addDocuments",0,function(e){return s(async()=>{if(0===e.length)return[];let t=await l(),r=e.map(u);return t.push(...r),await c(t),r})},"clearDocuments",0,function(){return s(async()=>{await c([])})},"corpusStats",0,d,"deleteDocument",0,function(e){return s(async()=>{let t=await l();await c(t.filter(t=>t.id!==e))})},"deleteDocuments",0,function(e){return s(async()=>{let t=await l(),r=new Set(e);await c(t.filter(e=>!r.has(e.id)))})},"readDocuments",0,l,"replaceDocuments",0,function(e){return s(async()=>{let t=new Date().toISOString();await c(e.map(e=>({...e,status:"unindexed",createdAt:e.createdAt||t})))})},"updateDocument",0,function(e,t){return s(async()=>{let r=await l(),a=r.findIndex(t=>t.id===e);if(a<0)return;let n=r[a],i=void 0!==t.content?t.content.trim():n.content,s={...n,title:void 0!==t.title?t.title.trim()||"Untitled":n.title,content:i,charCount:i.length,url:void 0!==t.url?t.url||void 0:n.url,metadata:void 0!==t.metadata?t.metadata:n.metadata,status:"unindexed"};return r[a]=s,await c(r),s})},"updateDocumentsStatus",0,function(e,t){return s(async()=>{let r=await l(),a=new Set(e),n=!1;for(let e of r)a.has(e.id)&&(e.status=t,n=!0);n&&await c(r)})}])},700259,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(761095),n=e.i(666680),i=e.i(874533),s=e.i(812057),o=e.i(367165);let l=(0,s.promisify)(i.exec);async function c(e,t){return l(e,{timeout:t,env:{...process.env,PATH:`${process.env.PATH||""}:/usr/local/bin:/opt/homebrew/bin:/bin:/usr/bin`}})}let u=r.default.join(process.cwd(),".larkup"),d=r.default.join(u,"firecrawl-local.json"),p=r.default.join(u,"firecrawl","docker-compose.yml"),w="ragtoolkit-firecrawl";async function f(e){return new Promise((t,r)=>{let n=a.default.createServer();n.listen(e,()=>{let e=n.address().port;n.close(()=>t(e))}),n.on("error",a=>{"EADDRINUSE"===a.code?f(0===e?0:e+1).then(t,r):r(a)})})}async function m(){try{let e=r.default.join(process.cwd(),"proxies.txt"),a=(await t.promises.readFile(e,"utf8")).split("\n").map(e=>e.trim()).filter(e=>e.length>0);if(a.length>0){let e=a[Math.floor(Math.random()*a.length)].split(":");if(e.length>=4)return{server:`http://${e[0]}:${e[1]}`,username:e[2],password:e[3]}}}catch(e){}let e=await (0,o.readConfig)();return e.useScraperProxy&&e.scraperProxyServer?{server:e.scraperProxyServer,username:e.scraperProxyUsername,password:e.scraperProxyPassword}:null}let h={running:!1,endpoint:"http://localhost:3002",apiKey:"",port:3002,project:w};async function g(){try{let e=await t.promises.readFile(d,"utf8");return{...h,...JSON.parse(e)}}catch{return h}}async function y(e){return await t.promises.mkdir(u,{recursive:!0}),await t.promises.writeFile(d,JSON.stringify(e,null,2),"utf8"),e}async function v(){try{await c("docker --version")}catch(e){return console.error("DOCKER ERR:",e),{docker:!1,compose:null}}try{return await c("docker compose version"),{docker:!0,compose:"docker compose"}}catch(e){console.error("DOCKER COMPOSE ERR:",e)}try{return await c("docker-compose version"),{docker:!0,compose:"docker-compose"}}catch{return{docker:!0,compose:null}}}async function S(){let{docker:e,compose:t}=await v();return e?t?{docker:!0,compose:!0,message:"Docker is ready."}:{docker:!0,compose:!1,message:"Docker is installed but the Compose plugin was not found. Install `docker compose` to launch Firecrawl locally."}:{docker:!1,compose:!1,message:"Docker isn't available on this machine. Install Docker Desktop (or the Docker engine) and make sure it's running."}}function E(e,t,r){let a=r?[`PROXY_SERVER: "${r.server}"`,...r.username&&r.password?[`PROXY_USERNAME: "${r.username}"`,`PROXY_PASSWORD: "${r.password}"`]:[]]:[],n=['PORT: "3000"',...a].map(e=>` ${e}`).join("\n"),i=['PORT: "3002"',...a,'HOST: "0.0.0.0"','REDIS_URL: "redis://redis:6379"','REDIS_RATE_LIMIT_URL: "redis://redis:6379"','PLAYWRIGHT_MICROSERVICE_URL: "http://playwright-service:3000/scrape"','USE_DB_AUTHENTICATION: "false"',`TEST_API_KEY: "${e}"`,`BULL_AUTH_KEY: "${e}"`,'DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_RABBITMQ_URL: "amqp://user:password@rabbitmq:5672"'].map(e=>` ${e}`).join("\n");return`# Auto-generated by RAG Toolkit. Do not edit by hand.
2
2
  services:
3
3
  db:
4
4
  image: ghcr.io/firecrawl/nuq-postgres:latest
@@ -6,6 +6,11 @@ services:
6
6
  POSTGRES_USER: user
7
7
  POSTGRES_PASSWORD: password
8
8
  POSTGRES_DB: postgres
9
+ healthcheck:
10
+ test: ["CMD-SHELL", "pg_isready -U user -d postgres"]
11
+ interval: 5s
12
+ timeout: 5s
13
+ retries: 12
9
14
  restart: unless-stopped
10
15
 
11
16
  rabbitmq:
@@ -24,6 +29,11 @@ services:
24
29
  redis:
25
30
  image: redis:alpine
26
31
  command: redis-server --save "" --appendonly no
32
+ healthcheck:
33
+ test: ["CMD", "redis-cli", "ping"]
34
+ interval: 5s
35
+ timeout: 3s
36
+ retries: 12
27
37
  restart: unless-stopped
28
38
 
29
39
  playwright-service:
@@ -35,15 +45,17 @@ ${n}
35
45
  api:
36
46
  image: ghcr.io/firecrawl/firecrawl:latest
37
47
  depends_on:
38
- - db
39
- - rabbitmq
40
- - redis
41
- - playwright-service
48
+ db:
49
+ condition: service_healthy
50
+ rabbitmq:
51
+ condition: service_healthy
52
+ redis:
53
+ condition: service_healthy
42
54
  ports:
43
55
  - "${t}:3002"
44
56
  environment:
45
57
  ${i}
46
58
  restart: unless-stopped
47
- `}async function R(){let e=await S();if(!e.compose)return y({...await g(),running:!1,lastError:e.message});let{compose:a}=await v(),i=await g(),o=i.apiKey||`fc-local-${(0,n.randomUUID)()}`,s=i.port||3002,l=await m();await t.promises.mkdir(r.default.dirname(p),{recursive:!0}),await t.promises.writeFile(p,E(o,s,l),"utf8");try{await c(`${a} -p ${w} -f "${p}" up -d`,18e4)}catch(r){let e=r instanceof Error?r.message:"docker compose failed";if(!(e.includes("address already in use")||e.includes("Ports are not available")))return y({...i,apiKey:o,port:s,running:!1,lastError:e});try{s=await f(s+1),await t.promises.writeFile(p,E(o,s,l),"utf8"),await c(`${a} -p ${w} -f "${p}" up -d`,18e4)}catch(e){return y({...i,apiKey:o,port:s,running:!1,lastError:e instanceof Error?e.message:"docker compose retry failed"})}}let u=(0,t.existsSync)("/.dockerenv"),d=`http://${u?"host.docker.internal":"localhost"}:${s}`,h=await D(d,6e4);return y({running:h,endpoint:d,apiKey:o,port:s,project:w,startedAt:new Date().toISOString(),lastError:h?void 0:"Containers started but the API did not become healthy in time. It may still be warming up — try refreshing in a moment."})}async function b(){let{compose:e}=await v(),t=await g();if(e)try{await c(`${e} -p ${w} -f "${p}" down`,6e4)}catch{}return y({...t,running:!1,startedAt:void 0})}async function C(){let e=await g();if(!e.startedAt)return e;let t=await A(e.endpoint);return t!==e.running?y({...e,running:t}):e}async function A(e){try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(4e3)})).status>0}catch{return!1}}async function D(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await A(e))return!0;await new Promise(e=>setTimeout(e,3e3))}return!1}let k="http://firecrawl-api:3002";async function I(){return"true"===process.env.DOCKER_ENV||"1"===process.env.DOCKER_BUILD||(0,t.existsSync)("/.dockerenv")?{available:await A(k),endpoint:k}:{available:!1,endpoint:""}}async function O(){let{available:e}=await I();return e?y({running:!0,endpoint:k,apiKey:`fc-docker-${(0,n.randomUUID)()}`,port:3002,project:"docker-sibling",startedAt:new Date().toISOString()}):y({...h,running:!1,lastError:"Firecrawl sibling service is not running. Restart with: docker compose --profile crawler up"})}e.s(["checkDocker",0,S,"checkDockerSibling",0,I,"connectDockerSibling",0,O,"readLocalState",0,g,"refreshLocalStatus",0,C,"startLocal",0,R,"stopLocal",0,b])},304368,e=>{"use strict";var t=e.i(367165),r=e.i(700259);class a extends Error{status;constructor(e,t){super(e),this.status=t,this.name="FirecrawlError"}}async function n(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();if(e.running&&e.apiKey)return{base:`${e.endpoint}/v1`,key:e.apiKey,mode:"local"};throw new a("Local Firecrawl is selected but not running. Launch a local instance from the UI.",401)}let n=e.firecrawlApiKey;if(n)return{base:"https://api.firecrawl.dev/v1",key:n,mode:"cloud"};throw new a("Cloud Firecrawl is selected but no API key is configured. Set FIRECRAWL_API_KEY in Settings.",401)}async function i(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();return!!(e.running&&e.apiKey)}return!!e.firecrawlApiKey}async function o(e,t){let{base:r,key:i}=await n(),o=await fetch(`${r}${e}`,{...t,headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json",...t?.headers??{}},cache:"no-store"}),s=await o.text(),c=s?l(s):{};if(!o.ok)throw new a(c?.error||`Firecrawl request failed (${o.status})`,o.status);return c}async function s(e){let{key:t}=await n(),r=await fetch(e,{headers:{Authorization:`Bearer ${t}`},cache:"no-store"}),i=await r.text(),o=i?l(i):{};if(!r.ok)throw new a(o?.error||`Firecrawl request failed (${r.status})`,r.status);return o}function l(e){try{return JSON.parse(e)}catch{return{}}}async function c(e,t=10){return((await o("/search",{method:"POST",body:JSON.stringify({query:e,limit:t})})).data??[]).map(e=>({url:e.url,title:e.title||e.url,description:e.description}))}let u={waitFor:1e4,onlyMainContent:!1,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Accept-Language":"en-US,en;q=0.9","Sec-Ch-Ua":'"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',"Sec-Ch-Ua-Mobile":"?0","Sec-Ch-Ua-Platform":'"Windows"'}};async function d(e){let t=(await o("/scrape",{method:"POST",body:JSON.stringify({url:e,formats:["markdown"],...u})})).data??{};return{url:t.metadata?.sourceURL||e,title:t.metadata?.title||t.metadata?.ogTitle||e,markdown:t.markdown??""}}async function p(e,t){let r=await o("/crawl",{method:"POST",body:JSON.stringify({url:e,limit:t,allowExternalLinks:!1,scrapeOptions:{...u,formats:["markdown"],onlyMainContent:!0}})});if(!r.id)throw new a("Firecrawl did not return a crawl id");return r.id}async function w(e,t=!1){let r=t?await s(e):await o(`/crawl/${e}`,{method:"GET"});return{state:r.status??"scraping",total:r.total??0,completed:r.completed??0,next:r.next,pages:(r.data??[]).map(e=>({url:e.metadata?.sourceURL||e.metadata?.url||"",title:e.metadata?.title||e.metadata?.sourceURL||"Untitled",markdown:e.markdown??""}))}}async function f(e){try{await o(`/crawl/${e}`,{method:"DELETE"})}catch{}}e.s(["FirecrawlError",0,a,"cancelCrawl",0,f,"getCrawlStatus",0,w,"isFirecrawlConfigured",0,i,"scrapePage",0,d,"searchWeb",0,c,"startCrawl",0,p])},798898,490117,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(192441);let n=Promise.resolve();function i(e){let t=n.then(e,e);return n=t.catch(()=>{}),t}async function o(e){let t=e?await (0,a.requireDataDir)():await (0,a.getDataDir)();return t?r.default.join(t,"jobs.json"):null}async function s(){let e=await o(!1);if(!e)return[];try{let r=await t.promises.readFile(e,"utf8");return JSON.parse(r)}catch{return[]}}async function l(e){let r=await o(!0);r&&await t.promises.writeFile(r,JSON.stringify(e,null,2),"utf8")}async function c(e){return(await s()).find(t=>t.id===e)}function u(e,t){return i(async()=>{let r=await s(),a=r.findIndex(t=>t.id===e);if(a<0)return;let n={...t(r[a]),updatedAt:new Date().toISOString()};return r[a]=n,await l(r),n})}e.s(["deleteJob",0,function(e){return i(async()=>{let t=await s();await l(t.filter(t=>t.id!==e))})},"getJob",0,c,"readJobs",0,s,"saveJob",0,function(e){return i(async()=>{let t=await s(),r=t.findIndex(t=>t.id===e.id),a={...e,updatedAt:new Date().toISOString()};return r>=0?t[r]=a:t.unshift(a),await l(t),a})},"updateJob",0,u],798898);var d=e.i(705252),p=e.i(304368);let w=new Set;function f(e){if(!e)return!1;let t=e.toLowerCase();return t.includes("verification successful. waiting for")||t.includes("please verify you are a human")||t.includes("checking if the site connection is secure")||t.includes("just a moment...")||t.includes("enable javascript and cookies to continue")}async function m(e,t){try{let r=await (0,p.scrapePage)(t.url);if(f(r.markdown))throw Error("Scraping blocked by anti-bot protection (e.g. Cloudflare)");return{added:await (0,d.addCrawledDocuments)(e,[{title:r.title,url:r.url,content:r.markdown,source:"scrape"}]),target:{...t,status:"completed",pagesCrawled:+!!r.markdown}}}catch(e){return{added:0,target:{...t,status:"failed",error:e instanceof Error?e.message:"scrape failed"}}}}async function h(e,t,r){try{if(!t.firecrawlId){let e=await (0,p.startCrawl)(t.url,r);return{added:0,target:{...t,firecrawlId:e,status:"running"}}}let a=t.firecrawlId,n=!1,i=0,o=0,s=t.pagesCrawled,l="running",c=[];for(;i<5;){let e=await (0,p.getCrawlStatus)(a,n);for(let t of(s=e.completed||s,e.pages))f(t.markdown)||c.push({title:t.title,url:t.url,content:t.markdown,source:"scrape"});if(i++,"completed"===e.state?l="completed":"failed"===e.state?l="failed":"cancelled"===e.state&&(l="cancelled"),e.next)a=e.next,n=!0;else break}return c.length&&(o=await (0,d.addCrawledDocuments)(e,c)),{added:o,target:{...t,status:l,pagesCrawled:s}}}catch(e){return{added:0,target:{...t,status:"failed",error:e instanceof Error?e.message:"crawl failed"}}}}async function g(e){let t=await c(e);if(t){if(["completed","failed","cancelled"].includes(t.status)||w.has(e))return t;w.add(e);try{let r=await Promise.all(t.targets.map(r=>"completed"===r.status||"failed"===r.status?Promise.resolve({target:r,added:0}):"page"===r.scope?m(e,r):h(e,r,t.pageLimit))),a=r.map(e=>e.target),n=a.reduce((e,t)=>e+t.pagesCrawled,0);return await u(e,e=>({...e,targets:a,pagesCrawled:n,docCount:e.docCount+r.reduce((e,t)=>e+t.added,0),status:a.every(e=>"completed"===e.status)?"completed":a.every(e=>"failed"===e.status)?"failed":a.every(e=>"completed"===e.status||"failed"===e.status)&&a.some(e=>"completed"===e.status)?"completed":"running"}))}finally{w.delete(e)}}}async function y(e){let t=await c(e);if(t)return await Promise.all(t.targets.filter(e=>e.firecrawlId&&"running"===e.status).map(e=>(0,p.cancelCrawl)(e.firecrawlId))),u(e,e=>({...e,status:"cancelled",targets:e.targets.map(e=>"running"===e.status||"queued"===e.status?{...e,status:"cancelled"}:e)}))}e.s(["cancelJob",0,y,"syncJob",0,g],490117)},491382,e=>{"use strict";var t=e.i(239441),r=e.i(449055),a=e.i(391328),n=e.i(6352),i=e.i(746789),o=e.i(423437),s=e.i(178820),l=e.i(569191),c=e.i(576251),u=e.i(199962),d=e.i(547545),p=e.i(664046),w=e.i(235691),f=e.i(298907),m=e.i(110763),h=e.i(193695);e.i(673243);var g=e.i(236167),y=e.i(766576),v=e.i(666680),S=e.i(798898),E=e.i(490117),R=e.i(304368),b=e.i(705252);async function C(){let e=await (0,S.readJobs)();return y.NextResponse.json({jobs:e,configured:await (0,R.isFirecrawlConfigured)()})}async function A(e){let t;if(!await (0,R.isFirecrawlConfigured)())return y.NextResponse.json({error:"No Firecrawl available. Launch a local instance or set FIRECRAWL_API_KEY to run scraping jobs."},{status:401});try{t=await e.json()}catch{return y.NextResponse.json({error:"Invalid request body."},{status:400})}let r=new Set((await (0,b.readDocuments)()).filter(e=>e.url).map(e=>e.url)),a=new Map,n=new Map;(t.targets??[]).forEach(e=>{if(e.url&&/^https?:\/\//i.test(e.url))try{let t=new URL(e.url).origin;r.has(t)||r.has(t+"/")||a.set(t,{url:t,scope:"domain"===e.scope?"domain":"page",status:"queued",pagesCrawled:0}),e.url===t||e.url===t+"/"||r.has(e.url)||n.set(e.url,{url:e.url,scope:"domain"===e.scope?"domain":"page",status:"queued",pagesCrawled:0})}catch{r.has(e.url)||n.set(e.url,{url:e.url,scope:"domain"===e.scope?"domain":"page",status:"queued",pagesCrawled:0})}});let i=[...Array.from(a.values()),...Array.from(n.values())];if(0===i.length)return y.NextResponse.json({error:"Select at least one valid new URL to scrape."},{status:400});let o={id:(0,v.randomUUID)(),keywords:t.keywords?.trim()||i[0].url,targets:i,status:"queued",pageLimit:Math.min(Math.max(t.pageLimit??2e3,1),2e3),pagesCrawled:0,docCount:0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};await (0,S.saveJob)(o);let s=await (0,E.syncJob)(o.id);return y.NextResponse.json({job:s??o},{status:201})}e.s(["GET",0,C,"POST",0,A,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],889376);var D=e.i(889376);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/jobs/route",pathname:"/api/jobs",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/jobs/route.ts",nextConfigOutput:"standalone",userland:D,...{}}),{workAsyncStorage:I,workUnitAsyncStorage:O,serverHooks:T}=k;async function x(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),k.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/jobs/route";y=y.replace(/\/index$/,"")||"/";let v=await k.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:S,deploymentId:E,params:R,nextConfig:b,parsedUrl:C,isDraftMode:A,prerenderManifest:D,routerServerContext:I,isOnDemandRevalidate:O,revalidateOnlyGenerated:T,resolvedPathname:x,clientReferenceManifest:P,serverActionsManifest:U}=v,_=(0,s.normalizeAppPath)(y),N=!!(D.dynamicRoutes[_]||D.routes[x]),F=async()=>((null==I?void 0:I.render404)?await I.render404(e,t,C,!1):t.end("This page could not be found"),null);if(N&&!A){let e=!!D.routes[x],t=D.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(b.adapterPath)return await F();throw new h.NoFallbackError}}let $=null;!N||k.isDev||A||($="/index"===($=x)?"/":$);let L=!0===k.isDev||!N,j=N&&!L;U&&P&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:P,serverActionsManifest:U});let q=e.method||"GET",M=(0,i.getTracer)(),K=M.getActiveScopeSpan(),H=!!(null==I?void 0:I.isWrappedByNextServer),J=!!(0,n.getRequestMeta)(e,"minimalMode"),B=(0,n.getRequestMeta)(e,"incrementalCache")||await k.getIncrementalCache(e,b,D,J);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let G={params:R,previewProps:D.preview,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts},cacheComponents:!!b.cacheComponents,supportsDynamicResponse:L,incrementalCache:B,cacheLifeProfiles:b.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>k.onRequestError(e,t,a,n,I)},sharedContext:{buildId:S,deploymentId:E}},W=new l.NodeNextRequest(e),Y=new l.NodeNextResponse(t),V=c.NextRequestAdapter.fromNodeNextRequest(W,(0,c.signalFromNodeResponse)(t));try{let n,o=async e=>k.handle(V,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${q} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${q} ${y}`)}),s=async n=>{var i,s;let l=async({previousCacheEntry:r})=>{try{if(!J&&O&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(n);e.fetchMetrics=G.renderOpts.fetchMetrics;let s=G.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let l=G.renderOpts.collectedTags;if(!N)return await (0,p.sendResponse)(W,Y,i,G.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,w.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await k.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:O})},!1,I),t}},c=await k.handleResponse({req:e,nextConfig:b,cacheKey:$,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:D,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:J});if(!N)return null;if((null==c||null==(i=c.value)?void 0:i.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(s=c.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});J||t.setHeader("x-nextjs-cache",O?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,w.fromNodeOutgoingHttpHeaders)(c.value.headers);return J&&N||u.delete(m.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,f.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(W,Y,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};H&&K?await s(K):(n=M.getActiveScopeSpan(),await M.withPropagatedContext(e.headers,()=>M.trace(u.BaseServerSpan.handleRequest,{spanName:`${q} ${y}`,kind:i.SpanKind.SERVER,attributes:{"http.method":q,"http.target":e.url}},s),void 0,!H))}catch(t){if(t instanceof h.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:O})},!1,I),N)throw t;return await (0,p.sendResponse)(W,Y,new Response(null,{status:500})),null}}e.s(["handler",0,x,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:I,workUnitAsyncStorage:O})},"routeModule",0,k,"serverHooks",0,T,"workAsyncStorage",0,I,"workUnitAsyncStorage",0,O],491382)}];
59
+ `}async function R(){let e=await S();if(!e.compose)return y({...await g(),running:!1,lastError:e.message});let{compose:a}=await v(),i=await g(),s=i.apiKey||`fc-local-${(0,n.randomUUID)()}`,o=i.port||3002,l=await m();await t.promises.mkdir(r.default.dirname(p),{recursive:!0}),await t.promises.writeFile(p,E(s,o,l),"utf8");try{await c(`${a} -p ${w} -f "${p}" up -d`,18e4)}catch(r){let e=r instanceof Error?r.message:"docker compose failed";if(!(e.includes("address already in use")||e.includes("Ports are not available")))return y({...i,apiKey:s,port:o,running:!1,lastError:e});try{o=await f(o+1),await t.promises.writeFile(p,E(s,o,l),"utf8"),await c(`${a} -p ${w} -f "${p}" up -d`,18e4)}catch(e){return y({...i,apiKey:s,port:o,running:!1,lastError:e instanceof Error?e.message:"docker compose retry failed"})}}let u=(0,t.existsSync)("/.dockerenv"),d=`http://${u?"host.docker.internal":"localhost"}:${o}`,h=await A(d,9e4);return y({running:h,endpoint:d,apiKey:s,port:o,project:w,startedAt:new Date().toISOString(),lastError:h?void 0:"Containers started but the API did not become healthy in time. It may still be warming up — try refreshing in a moment."})}async function b(){let{compose:e}=await v(),t=await g();if(e)try{await c(`${e} -p ${w} -f "${p}" down`,6e4)}catch{}return y({...t,running:!1,startedAt:void 0})}async function C(){let e=await g();if(!e.startedAt)return e;let t=await D(e.endpoint);return t!==e.running?y({...e,running:t}):e}async function D(e){try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(4e3)})).status>0}catch{return!1}}async function A(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await D(e))return!0;await new Promise(e=>setTimeout(e,3e3))}return!1}let k="http://firecrawl-api:3002";async function O(){return"true"===process.env.DOCKER_ENV||"1"===process.env.DOCKER_BUILD||(0,t.existsSync)("/.dockerenv")?{available:await D(k),endpoint:k}:{available:!1,endpoint:""}}async function T(){let{available:e}=await O();return e?y({running:!0,endpoint:k,apiKey:`fc-docker-${(0,n.randomUUID)()}`,port:3002,project:"docker-sibling",startedAt:new Date().toISOString()}):y({...h,running:!1,lastError:"The web crawler service is not available in this Docker deployment."})}e.s(["checkDocker",0,S,"checkDockerSibling",0,O,"connectDockerSibling",0,T,"readLocalState",0,g,"refreshLocalStatus",0,C,"startLocal",0,R,"stopLocal",0,b])},304368,e=>{"use strict";var t=e.i(367165),r=e.i(700259);class a extends Error{status;constructor(e,t){super(e),this.status=t,this.name="FirecrawlError"}}async function n(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();if(e.running&&e.apiKey)return{base:`${e.endpoint}/v1`,key:e.apiKey,mode:"local"};throw new a("The selected web crawler is not running. Choose a crawler provider in Settings.",401)}let n=e.firecrawlApiKey;if(n)return{base:"https://api.firecrawl.dev/v1",key:n,mode:"cloud"};throw new a("The cloud web crawler needs an API key. Add it in Settings.",401)}async function i(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();return!!(e.running&&e.apiKey)}return!!e.firecrawlApiKey}async function s(e,t){let{base:r,key:i}=await n(),s=await fetch(`${r}${e}`,{...t,headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json",...t?.headers??{}},cache:"no-store"}),o=await s.text(),c=o?l(o):{};if(!s.ok)throw new a(c?.error||`Firecrawl request failed (${s.status})`,s.status);return c}async function o(e){let{key:t}=await n(),r=await fetch(e,{headers:{Authorization:`Bearer ${t}`},cache:"no-store"}),i=await r.text(),s=i?l(i):{};if(!r.ok)throw new a(s?.error||`Firecrawl request failed (${r.status})`,r.status);return s}function l(e){try{return JSON.parse(e)}catch{return{}}}async function c(e,t=10){return((await s("/search",{method:"POST",body:JSON.stringify({query:e,limit:t})})).data??[]).map(e=>({url:e.url,title:e.title||e.url,description:e.description}))}let u={waitFor:1e4,onlyMainContent:!1,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Accept-Language":"en-US,en;q=0.9","Sec-Ch-Ua":'"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',"Sec-Ch-Ua-Mobile":"?0","Sec-Ch-Ua-Platform":'"Windows"'}};async function d(e){let t=(await s("/scrape",{method:"POST",body:JSON.stringify({url:e,formats:["markdown"],...u})})).data??{};return{url:t.metadata?.sourceURL||e,title:t.metadata?.title||t.metadata?.ogTitle||e,markdown:t.markdown??""}}async function p(e,t){let r=await s("/crawl",{method:"POST",body:JSON.stringify({url:e,limit:t,allowExternalLinks:!1,scrapeOptions:{...u,formats:["markdown"],onlyMainContent:!0}})});if(!r.id)throw new a("Firecrawl did not return a crawl id");return r.id}async function w(e,t=!1){let r=t?await o(e):await s(`/crawl/${e}`,{method:"GET"});return{state:r.status??"scraping",total:r.total??0,completed:r.completed??0,next:r.next,pages:(r.data??[]).map(e=>({url:e.metadata?.sourceURL||e.metadata?.url||"",title:e.metadata?.title||e.metadata?.sourceURL||"Untitled",markdown:e.markdown??""}))}}async function f(e){try{await s(`/crawl/${e}`,{method:"DELETE"})}catch{}}e.s(["FirecrawlError",0,a,"cancelCrawl",0,f,"getCrawlStatus",0,w,"isFirecrawlConfigured",0,i,"scrapePage",0,d,"searchWeb",0,c,"startCrawl",0,p])},798898,490117,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(192441);let n=Promise.resolve();function i(e){let t=n.then(e,e);return n=t.catch(()=>{}),t}async function s(e){let t=e?await (0,a.requireDataDir)():await (0,a.getDataDir)();return t?r.default.join(t,"jobs.json"):null}async function o(){let e=await s(!1);if(!e)return[];try{let r=await t.promises.readFile(e,"utf8");return JSON.parse(r)}catch{return[]}}async function l(e){let r=await s(!0);r&&await t.promises.writeFile(r,JSON.stringify(e,null,2),"utf8")}async function c(e){return(await o()).find(t=>t.id===e)}function u(e,t){return i(async()=>{let r=await o(),a=r.findIndex(t=>t.id===e);if(a<0)return;let n={...t(r[a]),updatedAt:new Date().toISOString()};return r[a]=n,await l(r),n})}e.s(["deleteJob",0,function(e){return i(async()=>{let t=await o();await l(t.filter(t=>t.id!==e))})},"getJob",0,c,"readJobs",0,o,"saveJob",0,function(e){return i(async()=>{let t=await o(),r=t.findIndex(t=>t.id===e.id),a={...e,updatedAt:new Date().toISOString()};return r>=0?t[r]=a:t.unshift(a),await l(t),a})},"updateJob",0,u],798898);var d=e.i(705252),p=e.i(304368);let w=new Set;function f(e){if(!e)return!1;let t=e.toLowerCase();return t.includes("verification successful. waiting for")||t.includes("please verify you are a human")||t.includes("checking if the site connection is secure")||t.includes("just a moment...")||t.includes("enable javascript and cookies to continue")}async function m(e,t){try{let r=await (0,p.scrapePage)(t.url);if(f(r.markdown))throw Error("Scraping blocked by anti-bot protection (e.g. Cloudflare)");return{added:await (0,d.addCrawledDocuments)(e,[{title:r.title,url:r.url,content:r.markdown,source:"scrape"}]),target:{...t,status:"completed",pagesCrawled:+!!r.markdown}}}catch(e){return{added:0,target:{...t,status:"failed",error:e instanceof Error?e.message:"scrape failed"}}}}async function h(e,t,r){try{if(!t.firecrawlId){let e=await (0,p.startCrawl)(t.url,r);return{added:0,target:{...t,firecrawlId:e,status:"running"}}}let a=t.firecrawlId,n=!1,i=0,s=0,o=t.pagesCrawled,l="running",c=[];for(;i<5;){let e=await (0,p.getCrawlStatus)(a,n);for(let t of(o=e.completed||o,e.pages))f(t.markdown)||c.push({title:t.title,url:t.url,content:t.markdown,source:"scrape"});if(i++,"completed"===e.state?l="completed":"failed"===e.state?l="failed":"cancelled"===e.state&&(l="cancelled"),e.next)a=e.next,n=!0;else break}return c.length&&(s=await (0,d.addCrawledDocuments)(e,c)),{added:s,target:{...t,status:l,pagesCrawled:o}}}catch(e){return{added:0,target:{...t,status:"failed",error:e instanceof Error?e.message:"crawl failed"}}}}async function g(e){let t=await c(e);if(t){if(["completed","failed","cancelled"].includes(t.status)||w.has(e))return t;w.add(e);try{let r=await Promise.all(t.targets.map(r=>"completed"===r.status||"failed"===r.status?Promise.resolve({target:r,added:0}):"page"===r.scope?m(e,r):h(e,r,t.pageLimit))),a=r.map(e=>e.target),n=a.reduce((e,t)=>e+t.pagesCrawled,0);return await u(e,e=>({...e,targets:a,pagesCrawled:n,docCount:e.docCount+r.reduce((e,t)=>e+t.added,0),status:a.every(e=>"completed"===e.status)?"completed":a.every(e=>"failed"===e.status)?"failed":a.every(e=>"completed"===e.status||"failed"===e.status)&&a.some(e=>"completed"===e.status)?"completed":"running"}))}finally{w.delete(e)}}}async function y(e){let t=await c(e);if(t)return await Promise.all(t.targets.filter(e=>e.firecrawlId&&"running"===e.status).map(e=>(0,p.cancelCrawl)(e.firecrawlId))),u(e,e=>({...e,status:"cancelled",targets:e.targets.map(e=>"running"===e.status||"queued"===e.status?{...e,status:"cancelled"}:e)}))}e.s(["cancelJob",0,y,"syncJob",0,g],490117)},491382,e=>{"use strict";var t=e.i(239441),r=e.i(449055),a=e.i(391328),n=e.i(6352),i=e.i(746789),s=e.i(423437),o=e.i(178820),l=e.i(569191),c=e.i(576251),u=e.i(199962),d=e.i(547545),p=e.i(664046),w=e.i(235691),f=e.i(298907),m=e.i(110763),h=e.i(193695);e.i(673243);var g=e.i(236167),y=e.i(766576),v=e.i(666680),S=e.i(798898),E=e.i(490117),R=e.i(304368),b=e.i(705252);async function C(){let e=await (0,S.readJobs)();return y.NextResponse.json({jobs:e,configured:await (0,R.isFirecrawlConfigured)()})}async function D(e){let t;if(!await (0,R.isFirecrawlConfigured)())return y.NextResponse.json({error:"No web crawler is available. Choose and configure a crawler provider in Settings."},{status:401});try{t=await e.json()}catch{return y.NextResponse.json({error:"Invalid request body."},{status:400})}let r=new Set((await (0,b.readDocuments)()).filter(e=>e.url).map(e=>e.url)),a=new Map,n=new Map;(t.targets??[]).forEach(e=>{if(e.url&&/^https?:\/\//i.test(e.url))try{let t=new URL(e.url).origin;r.has(t)||r.has(t+"/")||a.set(t,{url:t,scope:"domain"===e.scope?"domain":"page",status:"queued",pagesCrawled:0}),e.url===t||e.url===t+"/"||r.has(e.url)||n.set(e.url,{url:e.url,scope:"domain"===e.scope?"domain":"page",status:"queued",pagesCrawled:0})}catch{r.has(e.url)||n.set(e.url,{url:e.url,scope:"domain"===e.scope?"domain":"page",status:"queued",pagesCrawled:0})}});let i=[...Array.from(a.values()),...Array.from(n.values())];if(0===i.length)return y.NextResponse.json({error:"Select at least one valid new URL to scrape."},{status:400});let s={id:(0,v.randomUUID)(),keywords:t.keywords?.trim()||i[0].url,targets:i,status:"queued",pageLimit:Math.min(Math.max(t.pageLimit??2e3,1),2e3),pagesCrawled:0,docCount:0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};await (0,S.saveJob)(s);let o=await (0,E.syncJob)(s.id);return y.NextResponse.json({job:o??s},{status:201})}e.s(["GET",0,C,"POST",0,D,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],889376);var A=e.i(889376);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/jobs/route",pathname:"/api/jobs",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/jobs/route.ts",nextConfigOutput:"standalone",userland:A,...{}}),{workAsyncStorage:O,workUnitAsyncStorage:T,serverHooks:I}=k;async function x(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),k.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/jobs/route";y=y.replace(/\/index$/,"")||"/";let v=await k.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:S,deploymentId:E,params:R,nextConfig:b,parsedUrl:C,isDraftMode:D,prerenderManifest:A,routerServerContext:O,isOnDemandRevalidate:T,revalidateOnlyGenerated:I,resolvedPathname:x,clientReferenceManifest:U,serverActionsManifest:_}=v,P=(0,o.normalizeAppPath)(y),N=!!(A.dynamicRoutes[P]||A.routes[x]),$=async()=>((null==O?void 0:O.render404)?await O.render404(e,t,C,!1):t.end("This page could not be found"),null);if(N&&!D){let e=!!A.routes[x],t=A.dynamicRoutes[P];if(t&&!1===t.fallback&&!e){if(b.adapterPath)return await $();throw new h.NoFallbackError}}let L=null;!N||k.isDev||D||(L="/index"===(L=x)?"/":L);let j=!0===k.isDev||!N,F=N&&!j;_&&U&&(0,s.setManifestsSingleton)({page:y,clientReferenceManifest:U,serverActionsManifest:_});let q=e.method||"GET",M=(0,i.getTracer)(),H=M.getActiveScopeSpan(),K=!!(null==O?void 0:O.isWrappedByNextServer),J=!!(0,n.getRequestMeta)(e,"minimalMode"),B=(0,n.getRequestMeta)(e,"incrementalCache")||await k.getIncrementalCache(e,b,A,J);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let G={params:R,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts},cacheComponents:!!b.cacheComponents,supportsDynamicResponse:j,incrementalCache:B,cacheLifeProfiles:b.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>k.onRequestError(e,t,a,n,O)},sharedContext:{buildId:S,deploymentId:E}},W=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),X=c.NextRequestAdapter.fromNodeNextRequest(W,(0,c.signalFromNodeResponse)(t));try{let n,s=async e=>k.handle(X,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${q} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${q} ${y}`)}),o=async n=>{var i,o;let l=async({previousCacheEntry:r})=>{try{if(!J&&T&&I&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await s(n);e.fetchMetrics=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=G.renderOpts.collectedTags;if(!N)return await (0,p.sendResponse)(W,V,i,G.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,w.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await k.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:T})},!1,O),t}},c=await k.handleResponse({req:e,nextConfig:b,cacheKey:L,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:I,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:J});if(!N)return null;if((null==c||null==(i=c.value)?void 0:i.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(o=c.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});J||t.setHeader("x-nextjs-cache",T?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),D&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,w.fromNodeOutgoingHttpHeaders)(c.value.headers);return J&&N||u.delete(m.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,f.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(W,V,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};K&&H?await o(H):(n=M.getActiveScopeSpan(),await M.withPropagatedContext(e.headers,()=>M.trace(u.BaseServerSpan.handleRequest,{spanName:`${q} ${y}`,kind:i.SpanKind.SERVER,attributes:{"http.method":q,"http.target":e.url}},o),void 0,!K))}catch(t){if(t instanceof h.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:P,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:T})},!1,O),N)throw t;return await (0,p.sendResponse)(W,V,new Response(null,{status:500})),null}}e.s(["handler",0,x,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:O,workUnitAsyncStorage:T})},"routeModule",0,k,"serverHooks",0,I,"workAsyncStorage",0,O,"workUnitAsyncStorage",0,T],491382)}];
48
60
 
49
61
  //# sourceMappingURL=%5Broot-of-the-server%5D__0u17zp8._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[193695,(e,r,t)=>{r.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},918622,(e,r,t)=>{r.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},797569,(e,r,t)=>{"use strict";r.exports=e.r(918622)},243712,(e,r,t)=>{"use strict";r.exports=e.r(797569).vendored["react-rsc"].React},938516,(e,r,t)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,a={},l={RequestCookies:()=>g,ResponseCookies:()=>h,parseCookie:()=>p,parseSetCookie:()=>u,stringifyCookie:()=>c};for(var d in l)n(a,d,{get:l[d],enumerable:!0});function c(e){var r;let t=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),n=`${e.name}=${encodeURIComponent(null!=(r=e.value)?r:"")}`;return 0===t.length?n:`${n}; ${t.join("; ")}`}function p(e){let r=new Map;for(let t of e.split(/; */)){if(!t)continue;let e=t.indexOf("=");if(-1===e){r.set(t,"true");continue}let[n,o]=[t.slice(0,e),t.slice(e+1)];try{r.set(n,decodeURIComponent(null!=o?o:"true"))}catch{}}return r}function u(e){if(!e)return;let[[r,t],...n]=p(e),{domain:o,expires:i,httponly:s,maxage:a,path:l,samesite:d,secure:c,partitioned:u,priority:g}=Object.fromEntries(n.map(([e,r])=>[e.toLowerCase().replace(/-/g,""),r]));{var h,y,b={name:r,value:decodeURIComponent(t),domain:o,...i&&{expires:new Date(i)},...s&&{httpOnly:!0},..."string"==typeof a&&{maxAge:Number(a)},path:l,...d&&{sameSite:m.includes(h=(h=d).toLowerCase())?h:void 0},...c&&{secure:!0},...g&&{priority:f.includes(y=(y=g).toLowerCase())?y:void 0},...u&&{partitioned:!0}};let e={};for(let r in b)b[r]&&(e[r]=b[r]);return e}}r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of i(r))s.call(e,a)||void 0===a||n(e,a,{get:()=>r[a],enumerable:!(t=o(r,a))||t.enumerable});return e})(n({},"__esModule",{value:!0}),a);var m=["strict","lax","none"],f=["low","medium","high"],g=class{constructor(e){this._parsed=new Map,this._headers=e;const r=e.get("cookie");if(r)for(const[e,t]of p(r))this._parsed.set(e,{name:e,value:t})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let r="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(r)}getAll(...e){var r;let t=Array.from(this._parsed);if(!e.length)return t.map(([e,r])=>r);let n="string"==typeof e[0]?e[0]:null==(r=e[0])?void 0:r.name;return t.filter(([e])=>e===n).map(([e,r])=>r)}has(e){return this._parsed.has(e)}set(...e){let[r,t]=1===e.length?[e[0].name,e[0].value]:e,n=this._parsed;return n.set(r,{name:r,value:t}),this._headers.set("cookie",Array.from(n).map(([e,r])=>c(r)).join("; ")),this}delete(e){let r=this._parsed,t=Array.isArray(e)?e.map(e=>r.delete(e)):r.delete(e);return this._headers.set("cookie",Array.from(r).map(([e,r])=>c(r)).join("; ")),t}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},h=class{constructor(e){var r,t,n;this._parsed=new Map,this._headers=e;const o=null!=(n=null!=(t=null==(r=e.getSetCookie)?void 0:r.call(e))?t:e.get("set-cookie"))?n:[];for(const e of Array.isArray(o)?o:function(e){if(!e)return[];var r,t,n,o,i,s=[],a=0;function l(){for(;a<e.length&&/\s/.test(e.charAt(a));)a+=1;return a<e.length}for(;a<e.length;){for(r=a,i=!1;l();)if(","===(t=e.charAt(a))){for(n=a,a+=1,l(),o=a;a<e.length&&"="!==(t=e.charAt(a))&&";"!==t&&","!==t;)a+=1;a<e.length&&"="===e.charAt(a)?(i=!0,a=o,s.push(e.substring(r,n)),r=a):a=n+1}else a+=1;(!i||a>=e.length)&&s.push(e.substring(r,e.length))}return s}(o)){const r=u(e);r&&this._parsed.set(r.name,r)}}get(...e){let r="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(r)}getAll(...e){var r;let t=Array.from(this._parsed.values());if(!e.length)return t;let n="string"==typeof e[0]?e[0]:null==(r=e[0])?void 0:r.name;return t.filter(e=>e.name===n)}has(e){return this._parsed.has(e)}set(...e){let[r,t,n]=1===e.length?[e[0].name,e[0].value,e[0]]:e,o=this._parsed;return o.set(r,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:r,value:t,...n})),function(e,r){for(let[,t]of(r.delete("set-cookie"),e)){let e=c(t);r.append("set-cookie",e)}}(o,this._headers),this}delete(...e){let[r,t]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...t,name:r,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(c).join("; ")}}},399828,e=>{"use strict";let r={"openai/text-embedding-3-small":{dimensions:1536,maxInputTokens:8191},"openai/text-embedding-3-large":{dimensions:3072,maxInputTokens:8191},"openai/text-embedding-ada-002":{dimensions:1536,maxInputTokens:8191},"google/gemini-embedding-2":{dimensions:768,maxInputTokens:2048},"google/gemini-embedding-001":{dimensions:768,maxInputTokens:2048},"cohere/embed-english-v3.0":{dimensions:1024,maxInputTokens:512},"cohere/embed-multilingual-v3.0":{dimensions:1024,maxInputTokens:512},"voyage/voyage-3":{dimensions:1024,maxInputTokens:32e3},"voyage/voyage-3-lite":{dimensions:512,maxInputTokens:32e3},"voyage/voyage-code-3":{dimensions:1024,maxInputTokens:32e3},"mistral/mistral-embed":{dimensions:1024,maxInputTokens:8192},"jina/jina-embeddings-v3":{dimensions:1024,maxInputTokens:8192},"jina/jina-clip-v2":{dimensions:1024,maxInputTokens:8192},"nomic/nomic-embed-text-v1.5":{dimensions:768,maxInputTokens:8192}},t=[{id:"openai/text-embedding-3-small",label:"text-embedding-3-small",provider:"openai",dimensions:1536,maxInputTokens:8191,description:"Fast, cheap, strong general-purpose default."},{id:"openai/text-embedding-3-large",label:"text-embedding-3-large",provider:"openai",dimensions:3072,maxInputTokens:8191,description:"Highest quality OpenAI embeddings, larger vectors."},{id:"openai/text-embedding-ada-002",label:"text-embedding-ada-002",provider:"openai",dimensions:1536,maxInputTokens:8191,description:"Legacy model — kept for backward compatibility."},{id:"google/gemini-embedding-001",label:"gemini-embedding-001",provider:"google",dimensions:768,maxInputTokens:2048,description:"Gemini embedding 001."},{id:"cohere/embed-english-v3.0",label:"embed-english-v3.0",provider:"cohere",dimensions:1024,maxInputTokens:512,description:"Tuned for retrieval; great for English-heavy corpora."},{id:"cohere/embed-multilingual-v3.0",label:"embed-multilingual-v3.0",provider:"cohere",dimensions:1024,maxInputTokens:512,description:"100+ language multilingual retrieval embeddings."},{id:"voyage/voyage-3",label:"voyage-3",provider:"voyage",dimensions:1024,maxInputTokens:32e3,description:"Voyage's best general-purpose retrieval model."},{id:"voyage/voyage-3-lite",label:"voyage-3-lite",provider:"voyage",dimensions:512,maxInputTokens:32e3,description:"Optimized for latency and cost with strong performance."},{id:"voyage/voyage-code-3",label:"voyage-code-3",provider:"voyage",dimensions:1024,maxInputTokens:32e3,description:"Specialized for code retrieval tasks."},{id:"mistral/mistral-embed",label:"mistral-embed",provider:"mistral",dimensions:1024,maxInputTokens:8192,description:"Mistral's efficient embedding model for retrieval."},{id:"jina/jina-embeddings-v3",label:"jina-embeddings-v3",provider:"jina",dimensions:1024,maxInputTokens:8192,description:"Multilingual, task-specific embeddings from Jina AI."},{id:"jina/jina-clip-v2",label:"jina-clip-v2",provider:"jina",dimensions:1024,maxInputTokens:8192,description:"Multimodal embeddings for text and images."},{id:"nomic/nomic-embed-text-v1.5",label:"nomic-embed-text-v1.5",provider:"nomic",dimensions:768,maxInputTokens:8192,description:"Open-source, highly capable text embeddings."}];e.s(["EMBEDDING_DIMENSIONS",0,r,"EMBEDDING_MODELS",0,t,"getEmbeddingModel",0,function(e){return t.find(r=>r.id===e)},"getEmbeddingModelsForProvider",0,function(e,r){return"vercel_ai_gateway"===r?e:e.filter(e=>e.provider?.toLowerCase()===r.toLowerCase())},"toEmbeddingDescriptor",0,function(e){let t=r[e.id],n=e.id.split("/")[0]||e.owned_by;return{id:e.id,label:e.name||e.id.split("/").slice(1).join("/"),provider:n,dimensions:t?.dimensions??e.context_window??768,maxInputTokens:t?.maxInputTokens??e.max_tokens??2048,description:e.description||""}}])},814747,(e,r,t)=>{r.exports=e.x("path",()=>require("path"))},522734,(e,r,t)=>{r.exports=e.x("fs",()=>require("fs"))},446786,(e,r,t)=>{r.exports=e.x("os",()=>require("os"))},310470,(e,r,t)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,a={},l={VercelOidcTokenError:()=>c};for(var d in l)n(a,d,{get:l[d],enumerable:!0});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of i(r))s.call(e,a)||void 0===a||n(e,a,{get:()=>r[a],enumerable:!(t=o(r,a))||t.enumerable});return e})(n({},"__esModule",{value:!0}),a);class c extends Error{constructor(e,r){super(e),this.name="VercelOidcTokenError",this.cause=r}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},33015,(e,r,t)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,a={},l={AccessTokenMissingError:()=>c,RefreshAccessTokenFailedError:()=>p};for(var d in l)n(a,d,{get:l[d],enumerable:!0});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of i(r))s.call(e,a)||void 0===a||n(e,a,{get:()=>r[a],enumerable:!(t=o(r,a))||t.enumerable});return e})(n({},"__esModule",{value:!0}),a);class c extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login)."),this.name="AccessTokenMissingError"}}class p extends Error{constructor(e){super("Failed to refresh authentication token.",{cause:e}),this.name="RefreshAccessTokenFailedError"}}},250216,(e,r,t)=>{"use strict";var n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,a=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,d=(e,r,t,n)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of s(r))l.call(e,a)||a===t||o(e,a,{get:()=>r[a],enumerable:!(n=i(r,a))||n.enumerable});return e},c=(e,r,t)=>(t=null!=e?n(a(e)):{},d(!r&&e&&e.__esModule?t:o(t,"default",{value:e,enumerable:!0}),e)),p={},u={findRootDir:()=>b,getUserDataDir:()=>v};for(var m in u)o(p,m,{get:u[m],enumerable:!0});r.exports=d(o({},"__esModule",{value:!0}),p);var f=c(e.r(814747)),g=c(e.r(522734)),h=c(e.r(446786)),y=e.r(310470);function b(){try{let e=process.cwd();for(;e!==f.default.dirname(e);){let r=f.default.join(e,".vercel");if(g.default.existsSync(r))return e;e=f.default.dirname(e)}}catch(e){throw new y.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function v(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(h.default.platform()){case"darwin":return f.default.join(h.default.homedir(),"Library/Application Support");case"linux":return f.default.join(h.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}},775427,(e,r,t)=>{"use strict";var n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,a=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,d=(e,r,t,n)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of s(r))l.call(e,a)||a===t||o(e,a,{get:()=>r[a],enumerable:!(n=i(r,a))||n.enumerable});return e},c=(e,r,t)=>(t=null!=e?n(a(e)):{},d(!r&&e&&e.__esModule?t:o(t,"default",{value:e,enumerable:!0}),e)),p={},u={isValidAccessToken:()=>k,readAuthConfig:()=>b,writeAuthConfig:()=>v};for(var m in u)o(p,m,{get:u[m],enumerable:!0});r.exports=d(o({},"__esModule",{value:!0}),p);var f=c(e.r(522734)),g=c(e.r(814747)),h=e.r(65048);function y(){let e=(0,h.getVercelDataDir)();if(!e)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return g.join(e,"auth.json")}function b(){try{let e=y();if(!f.existsSync(e))return null;let r=f.readFileSync(e,"utf8");if(!r)return null;return JSON.parse(r)}catch(e){return null}}function v(e){let r=y(),t=g.dirname(r);f.existsSync(t)||f.mkdirSync(t,{mode:504,recursive:!0}),f.writeFileSync(r,JSON.stringify(e,null,2),{mode:384})}function k(e,r=0){if(!e.token)return!1;if("number"!=typeof e.expiresAt)return!0;let t=Math.floor(Date.now()/1e3);return e.expiresAt>=t+r/1e3}},371746,(e,r,t)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,a={},l={processTokenResponse:()=>g,refreshTokenRequest:()=>f};for(var d in l)n(a,d,{get:l[d],enumerable:!0});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of i(r))s.call(e,a)||void 0===a||n(e,a,{get:()=>r[a],enumerable:!(t=o(r,a))||t.enumerable});return e})(n({},"__esModule",{value:!0}),a);var c=e.r(446786);let p=`@vercel/oidc node-${process.version} ${(0,c.platform)()} (${(0,c.arch)()}) ${(0,c.hostname)()}`,u=null;async function m(){if(u)return u;let e=await fetch("https://vercel.com/.well-known/openid-configuration",{headers:{"user-agent":p}});if(!e.ok)throw Error("Failed to discover OAuth endpoints");let r=await e.json();if(!r||"string"!=typeof r.token_endpoint)throw Error("Invalid OAuth discovery response");let t=r.token_endpoint;return u=t,t}async function f(e){let r=await m();return await fetch(r,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":p},body:new URLSearchParams({client_id:"cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",grant_type:"refresh_token",...e})})}async function g(e){let r=await e.json();return e.ok?"object"!=typeof r||null===r?[Error("Invalid token response")]:"string"!=typeof r.access_token?[Error("Missing access_token in response")]:"Bearer"!==r.token_type?[Error("Invalid token_type in response")]:"number"!=typeof r.expires_in?[Error("Missing expires_in in response")]:[null,r]:[Error("object"==typeof r&&r&&"error"in r?String(r.error):"Token refresh failed")]}},65048,(e,r,t)=>{"use strict";var n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,a=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,d=(e,r,t,n)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of s(r))l.call(e,a)||a===t||o(e,a,{get:()=>r[a],enumerable:!(n=i(r,a))||n.enumerable});return e},c=(e,r,t)=>(t=null!=e?n(a(e)):{},d(!r&&e&&e.__esModule?t:o(t,"default",{value:e,enumerable:!0}),e)),p={},u={assertVercelOidcTokenResponse:()=>j,findProjectInfo:()=>_,getTokenPayload:()=>I,getVercelDataDir:()=>x,getVercelOidcToken:()=>O,getVercelToken:()=>w,isExpired:()=>P,loadToken:()=>A,saveToken:()=>T};for(var m in u)o(p,m,{get:u[m],enumerable:!0});r.exports=d(o({},"__esModule",{value:!0}),p);var f=c(e.r(814747)),g=c(e.r(522734)),h=e.r(310470),y=e.r(250216),b=e.r(775427),v=e.r(371746),k=e.r(33015);function x(){let e=(0,y.getUserDataDir)();return e?f.join(e,"com.vercel.cli"):null}async function w(e){let r=(0,b.readAuthConfig)();if(!r?.token)throw new k.AccessTokenMissingError;if((0,b.isValidAccessToken)(r,e?.expirationBufferMs))return r.token;if(!r.refreshToken)throw(0,b.writeAuthConfig)({}),new k.RefreshAccessTokenFailedError("No refresh token available");try{let e=await (0,v.refreshTokenRequest)({refresh_token:r.refreshToken}),[t,n]=await (0,v.processTokenResponse)(e);if(t||!n)throw(0,b.writeAuthConfig)({}),new k.RefreshAccessTokenFailedError(t);let o={token:n.access_token,expiresAt:Math.floor(Date.now()/1e3)+n.expires_in};return n.refresh_token&&(o.refreshToken=n.refresh_token),(0,b.writeAuthConfig)(o),o.token}catch(e){if((0,b.writeAuthConfig)({}),e instanceof k.AccessTokenMissingError||e instanceof k.RefreshAccessTokenFailedError)throw e;throw new k.RefreshAccessTokenFailedError(e)}}async function O(e,r,t){let n=`https://api.vercel.com/v1/projects/${r}/token?source=vercel-oidc-refresh${t?`&teamId=${t}`:""}`,o=await fetch(n,{method:"POST",headers:{Authorization:`Bearer ${e}`}});if(!o.ok)throw new h.VercelOidcTokenError(`Failed to refresh OIDC token: ${o.statusText}`);let i=await o.json();return j(i),i}function j(e){if(!e||"object"!=typeof e)throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in e)||"string"!=typeof e.token)throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function _(){let e=(0,y.findRootDir)();if(!e)throw new h.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let r=f.join(e,".vercel","project.json");if(!g.existsSync(r))throw new h.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let t=JSON.parse(g.readFileSync(r,"utf8"));if("string"!=typeof t.projectId&&"string"!=typeof t.orgId)throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:t.projectId,teamId:t.orgId}}function T(e,r){let t=(0,y.getUserDataDir)();if(!t)throw new h.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let n=f.join(t,"com.vercel.token",`${r}.json`),o=JSON.stringify(e);g.mkdirSync(f.dirname(n),{mode:504,recursive:!0}),g.writeFileSync(n,o),g.chmodSync(n,432)}function A(e){let r=(0,y.getUserDataDir)();if(!r)throw new h.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let t=f.join(r,"com.vercel.token",`${e}.json`);if(!g.existsSync(t))return null;let n=JSON.parse(g.readFileSync(t,"utf8"));return j(n),n}function I(e){let r=e.split(".");if(3!==r.length)throw new h.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let t=r[1].replace(/-/g,"+").replace(/_/g,"/"),n=t.padEnd(t.length+(4-t.length%4)%4,"=");return JSON.parse(Buffer.from(n,"base64").toString("utf8"))}function P(e,r=0){return 1e3*e.exp<Date.now()+r}},600373,e=>{"use strict";var r=e.i(416487),t=e.i(256485),n=e.i(528909),o=e.i(733164),i=e.i(731699),s=e.i(235072),a=e.i(344963);e.s(["getAIModel",0,function(e){let l=e.embeddingModelId;l.includes("/")&&(l=l.split("/")[1]);let d=e.embeddingApiKey?.trim()||"NO_API_KEY_PROVIDED_FROM_UI";if(e.embeddingModelId.startsWith("custom:")){let r=e.embeddingModelId.slice(7),n=(e.customEmbeddings??[]).find(e=>e.modelName===r);if(n)return(0,t.createOpenAICompatible)({name:"custom_provider",baseURL:n.baseUrl,apiKey:n.apiKey||e.embeddingApiKey||void 0}).embeddingModel(n.modelName)}return"deepseek"===e.embeddingProvider?(0,n.createDeepSeek)({apiKey:d}).embeddingModel(l):"google"===e.embeddingProvider?(0,o.createGoogleGenerativeAI)({apiKey:d}).textEmbeddingModel(l):"cohere"===e.embeddingProvider?(0,i.createCohere)({apiKey:d}).embedding(l):"mistral"===e.embeddingProvider?(0,s.createMistral)({apiKey:d}).embedding(l):"vercel_ai_gateway"===e.embeddingProvider?(0,a.createGateway)({apiKey:d}).embedding(e.embeddingModelId):(0,r.createOpenAI)({apiKey:d}).embedding(l)}])},225970,e=>{e.v(e=>Promise.resolve().then(()=>e(65048)))},953341,e=>{e.v(r=>Promise.all(["server/chunks/15sd_@vercel_oidc_dist_token_10ruti0.js"].map(r=>e.l(r))).then(()=>r(624299)))}];
1
+ module.exports=[193695,(e,r,t)=>{r.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},918622,(e,r,t)=>{r.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},797569,(e,r,t)=>{"use strict";r.exports=e.r(918622)},243712,(e,r,t)=>{"use strict";r.exports=e.r(797569).vendored["react-rsc"].React},938516,(e,r,t)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,a={},l={RequestCookies:()=>g,ResponseCookies:()=>h,parseCookie:()=>p,parseSetCookie:()=>u,stringifyCookie:()=>c};for(var d in l)n(a,d,{get:l[d],enumerable:!0});function c(e){var r;let t=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),n=`${e.name}=${encodeURIComponent(null!=(r=e.value)?r:"")}`;return 0===t.length?n:`${n}; ${t.join("; ")}`}function p(e){let r=new Map;for(let t of e.split(/; */)){if(!t)continue;let e=t.indexOf("=");if(-1===e){r.set(t,"true");continue}let[n,o]=[t.slice(0,e),t.slice(e+1)];try{r.set(n,decodeURIComponent(null!=o?o:"true"))}catch{}}return r}function u(e){if(!e)return;let[[r,t],...n]=p(e),{domain:o,expires:i,httponly:s,maxage:a,path:l,samesite:d,secure:c,partitioned:u,priority:g}=Object.fromEntries(n.map(([e,r])=>[e.toLowerCase().replace(/-/g,""),r]));{var h,y,v={name:r,value:decodeURIComponent(t),domain:o,...i&&{expires:new Date(i)},...s&&{httpOnly:!0},..."string"==typeof a&&{maxAge:Number(a)},path:l,...d&&{sameSite:m.includes(h=(h=d).toLowerCase())?h:void 0},...c&&{secure:!0},...g&&{priority:f.includes(y=(y=g).toLowerCase())?y:void 0},...u&&{partitioned:!0}};let e={};for(let r in v)v[r]&&(e[r]=v[r]);return e}}r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of i(r))s.call(e,a)||void 0===a||n(e,a,{get:()=>r[a],enumerable:!(t=o(r,a))||t.enumerable});return e})(n({},"__esModule",{value:!0}),a);var m=["strict","lax","none"],f=["low","medium","high"],g=class{constructor(e){this._parsed=new Map,this._headers=e;const r=e.get("cookie");if(r)for(const[e,t]of p(r))this._parsed.set(e,{name:e,value:t})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let r="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(r)}getAll(...e){var r;let t=Array.from(this._parsed);if(!e.length)return t.map(([e,r])=>r);let n="string"==typeof e[0]?e[0]:null==(r=e[0])?void 0:r.name;return t.filter(([e])=>e===n).map(([e,r])=>r)}has(e){return this._parsed.has(e)}set(...e){let[r,t]=1===e.length?[e[0].name,e[0].value]:e,n=this._parsed;return n.set(r,{name:r,value:t}),this._headers.set("cookie",Array.from(n).map(([e,r])=>c(r)).join("; ")),this}delete(e){let r=this._parsed,t=Array.isArray(e)?e.map(e=>r.delete(e)):r.delete(e);return this._headers.set("cookie",Array.from(r).map(([e,r])=>c(r)).join("; ")),t}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},h=class{constructor(e){var r,t,n;this._parsed=new Map,this._headers=e;const o=null!=(n=null!=(t=null==(r=e.getSetCookie)?void 0:r.call(e))?t:e.get("set-cookie"))?n:[];for(const e of Array.isArray(o)?o:function(e){if(!e)return[];var r,t,n,o,i,s=[],a=0;function l(){for(;a<e.length&&/\s/.test(e.charAt(a));)a+=1;return a<e.length}for(;a<e.length;){for(r=a,i=!1;l();)if(","===(t=e.charAt(a))){for(n=a,a+=1,l(),o=a;a<e.length&&"="!==(t=e.charAt(a))&&";"!==t&&","!==t;)a+=1;a<e.length&&"="===e.charAt(a)?(i=!0,a=o,s.push(e.substring(r,n)),r=a):a=n+1}else a+=1;(!i||a>=e.length)&&s.push(e.substring(r,e.length))}return s}(o)){const r=u(e);r&&this._parsed.set(r.name,r)}}get(...e){let r="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(r)}getAll(...e){var r;let t=Array.from(this._parsed.values());if(!e.length)return t;let n="string"==typeof e[0]?e[0]:null==(r=e[0])?void 0:r.name;return t.filter(e=>e.name===n)}has(e){return this._parsed.has(e)}set(...e){let[r,t,n]=1===e.length?[e[0].name,e[0].value,e[0]]:e,o=this._parsed;return o.set(r,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:r,value:t,...n})),function(e,r){for(let[,t]of(r.delete("set-cookie"),e)){let e=c(t);r.append("set-cookie",e)}}(o,this._headers),this}delete(...e){let[r,t]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...t,name:r,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(c).join("; ")}}},399828,e=>{"use strict";let r={"openai/text-embedding-3-small":{dimensions:1536,maxInputTokens:8191},"openai/text-embedding-3-large":{dimensions:3072,maxInputTokens:8191},"openai/text-embedding-ada-002":{dimensions:1536,maxInputTokens:8191},"google/gemini-embedding-2":{dimensions:768,maxInputTokens:2048},"google/gemini-embedding-001":{dimensions:768,maxInputTokens:2048},"cohere/embed-english-v3.0":{dimensions:1024,maxInputTokens:512},"cohere/embed-multilingual-v3.0":{dimensions:1024,maxInputTokens:512},"voyage/voyage-3":{dimensions:1024,maxInputTokens:32e3},"voyage/voyage-3-lite":{dimensions:512,maxInputTokens:32e3},"voyage/voyage-code-3":{dimensions:1024,maxInputTokens:32e3},"mistral/mistral-embed":{dimensions:1024,maxInputTokens:8192},"jina/jina-embeddings-v3":{dimensions:1024,maxInputTokens:8192},"jina/jina-clip-v2":{dimensions:1024,maxInputTokens:8192},"nomic/nomic-embed-text-v1.5":{dimensions:768,maxInputTokens:8192}},t=[{id:"openai/text-embedding-3-small",label:"text-embedding-3-small",provider:"openai",dimensions:1536,maxInputTokens:8191,description:"Fast, cheap, strong general-purpose default."},{id:"openai/text-embedding-3-large",label:"text-embedding-3-large",provider:"openai",dimensions:3072,maxInputTokens:8191,description:"Highest quality OpenAI embeddings, larger vectors."},{id:"openai/text-embedding-ada-002",label:"text-embedding-ada-002",provider:"openai",dimensions:1536,maxInputTokens:8191,description:"Legacy model — kept for backward compatibility."},{id:"google/gemini-embedding-001",label:"gemini-embedding-001",provider:"google",dimensions:768,maxInputTokens:2048,description:"Gemini embedding 001."},{id:"cohere/embed-english-v3.0",label:"embed-english-v3.0",provider:"cohere",dimensions:1024,maxInputTokens:512,description:"Tuned for retrieval; great for English-heavy corpora."},{id:"cohere/embed-multilingual-v3.0",label:"embed-multilingual-v3.0",provider:"cohere",dimensions:1024,maxInputTokens:512,description:"100+ language multilingual retrieval embeddings."},{id:"voyage/voyage-3",label:"voyage-3",provider:"voyage",dimensions:1024,maxInputTokens:32e3,description:"Voyage's best general-purpose retrieval model."},{id:"voyage/voyage-3-lite",label:"voyage-3-lite",provider:"voyage",dimensions:512,maxInputTokens:32e3,description:"Optimized for latency and cost with strong performance."},{id:"voyage/voyage-code-3",label:"voyage-code-3",provider:"voyage",dimensions:1024,maxInputTokens:32e3,description:"Specialized for code retrieval tasks."},{id:"mistral/mistral-embed",label:"mistral-embed",provider:"mistral",dimensions:1024,maxInputTokens:8192,description:"Mistral's efficient embedding model for retrieval."},{id:"jina/jina-embeddings-v3",label:"jina-embeddings-v3",provider:"jina",dimensions:1024,maxInputTokens:8192,description:"Multilingual, task-specific embeddings from Jina AI."},{id:"jina/jina-clip-v2",label:"jina-clip-v2",provider:"jina",dimensions:1024,maxInputTokens:8192,description:"Multimodal embeddings for text and images."},{id:"nomic/nomic-embed-text-v1.5",label:"nomic-embed-text-v1.5",provider:"nomic",dimensions:768,maxInputTokens:8192,description:"Open-source, highly capable text embeddings."}];e.s(["EMBEDDING_DIMENSIONS",0,r,"EMBEDDING_MODELS",0,t,"getEmbeddingModel",0,function(e){return t.find(r=>r.id===e)},"getEmbeddingModelsForProvider",0,function(e,r){return"vercel_ai_gateway"===r?e:e.filter(e=>e.provider?.toLowerCase()===r.toLowerCase())},"toEmbeddingDescriptor",0,function(e){let t=r[e.id],n=e.id.split("/")[0]||e.owned_by;return{id:e.id,label:e.name||e.id.split("/").slice(1).join("/"),provider:n,dimensions:t?.dimensions??e.context_window??768,maxInputTokens:t?.maxInputTokens??e.max_tokens??2048,description:e.description||""}}])},814747,(e,r,t)=>{r.exports=e.x("path",()=>require("path"))},522734,(e,r,t)=>{r.exports=e.x("fs",()=>require("fs"))},446786,(e,r,t)=>{r.exports=e.x("os",()=>require("os"))},310470,(e,r,t)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,a={},l={VercelOidcTokenError:()=>c};for(var d in l)n(a,d,{get:l[d],enumerable:!0});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of i(r))s.call(e,a)||void 0===a||n(e,a,{get:()=>r[a],enumerable:!(t=o(r,a))||t.enumerable});return e})(n({},"__esModule",{value:!0}),a);class c extends Error{constructor(e,r){super(e),this.name="VercelOidcTokenError",this.cause=r}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},33015,(e,r,t)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,a={},l={AccessTokenMissingError:()=>c,RefreshAccessTokenFailedError:()=>p};for(var d in l)n(a,d,{get:l[d],enumerable:!0});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of i(r))s.call(e,a)||void 0===a||n(e,a,{get:()=>r[a],enumerable:!(t=o(r,a))||t.enumerable});return e})(n({},"__esModule",{value:!0}),a);class c extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login)."),this.name="AccessTokenMissingError"}}class p extends Error{constructor(e){super("Failed to refresh authentication token.",{cause:e}),this.name="RefreshAccessTokenFailedError"}}},250216,(e,r,t)=>{"use strict";var n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,a=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,d=(e,r,t,n)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of s(r))l.call(e,a)||a===t||o(e,a,{get:()=>r[a],enumerable:!(n=i(r,a))||n.enumerable});return e},c=(e,r,t)=>(t=null!=e?n(a(e)):{},d(!r&&e&&e.__esModule?t:o(t,"default",{value:e,enumerable:!0}),e)),p={},u={findRootDir:()=>v,getUserDataDir:()=>b};for(var m in u)o(p,m,{get:u[m],enumerable:!0});r.exports=d(o({},"__esModule",{value:!0}),p);var f=c(e.r(814747)),g=c(e.r(522734)),h=c(e.r(446786)),y=e.r(310470);function v(){try{let e=process.cwd();for(;e!==f.default.dirname(e);){let r=f.default.join(e,".vercel");if(g.default.existsSync(r))return e;e=f.default.dirname(e)}}catch(e){throw new y.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function b(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(h.default.platform()){case"darwin":return f.default.join(h.default.homedir(),"Library/Application Support");case"linux":return f.default.join(h.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}},775427,(e,r,t)=>{"use strict";var n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,a=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,d=(e,r,t,n)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of s(r))l.call(e,a)||a===t||o(e,a,{get:()=>r[a],enumerable:!(n=i(r,a))||n.enumerable});return e},c=(e,r,t)=>(t=null!=e?n(a(e)):{},d(!r&&e&&e.__esModule?t:o(t,"default",{value:e,enumerable:!0}),e)),p={},u={isValidAccessToken:()=>k,readAuthConfig:()=>v,writeAuthConfig:()=>b};for(var m in u)o(p,m,{get:u[m],enumerable:!0});r.exports=d(o({},"__esModule",{value:!0}),p);var f=c(e.r(522734)),g=c(e.r(814747)),h=e.r(65048);function y(){let e=(0,h.getVercelDataDir)();if(!e)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return g.join(e,"auth.json")}function v(){try{let e=y();if(!f.existsSync(e))return null;let r=f.readFileSync(e,"utf8");if(!r)return null;return JSON.parse(r)}catch(e){return null}}function b(e){let r=y(),t=g.dirname(r);f.existsSync(t)||f.mkdirSync(t,{mode:504,recursive:!0}),f.writeFileSync(r,JSON.stringify(e,null,2),{mode:384})}function k(e,r=0){if(!e.token)return!1;if("number"!=typeof e.expiresAt)return!0;let t=Math.floor(Date.now()/1e3);return e.expiresAt>=t+r/1e3}},371746,(e,r,t)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,a={},l={processTokenResponse:()=>g,refreshTokenRequest:()=>f};for(var d in l)n(a,d,{get:l[d],enumerable:!0});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of i(r))s.call(e,a)||void 0===a||n(e,a,{get:()=>r[a],enumerable:!(t=o(r,a))||t.enumerable});return e})(n({},"__esModule",{value:!0}),a);var c=e.r(446786);let p=`@vercel/oidc node-${process.version} ${(0,c.platform)()} (${(0,c.arch)()}) ${(0,c.hostname)()}`,u=null;async function m(){if(u)return u;let e=await fetch("https://vercel.com/.well-known/openid-configuration",{headers:{"user-agent":p}});if(!e.ok)throw Error("Failed to discover OAuth endpoints");let r=await e.json();if(!r||"string"!=typeof r.token_endpoint)throw Error("Invalid OAuth discovery response");let t=r.token_endpoint;return u=t,t}async function f(e){let r=await m();return await fetch(r,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":p},body:new URLSearchParams({client_id:"cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",grant_type:"refresh_token",...e})})}async function g(e){let r=await e.json();return e.ok?"object"!=typeof r||null===r?[Error("Invalid token response")]:"string"!=typeof r.access_token?[Error("Missing access_token in response")]:"Bearer"!==r.token_type?[Error("Invalid token_type in response")]:"number"!=typeof r.expires_in?[Error("Missing expires_in in response")]:[null,r]:[Error("object"==typeof r&&r&&"error"in r?String(r.error):"Token refresh failed")]}},65048,(e,r,t)=>{"use strict";var n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,a=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,d=(e,r,t,n)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of s(r))l.call(e,a)||a===t||o(e,a,{get:()=>r[a],enumerable:!(n=i(r,a))||n.enumerable});return e},c=(e,r,t)=>(t=null!=e?n(a(e)):{},d(!r&&e&&e.__esModule?t:o(t,"default",{value:e,enumerable:!0}),e)),p={},u={assertVercelOidcTokenResponse:()=>j,findProjectInfo:()=>_,getTokenPayload:()=>I,getVercelDataDir:()=>x,getVercelOidcToken:()=>O,getVercelToken:()=>w,isExpired:()=>P,loadToken:()=>A,saveToken:()=>T};for(var m in u)o(p,m,{get:u[m],enumerable:!0});r.exports=d(o({},"__esModule",{value:!0}),p);var f=c(e.r(814747)),g=c(e.r(522734)),h=e.r(310470),y=e.r(250216),v=e.r(775427),b=e.r(371746),k=e.r(33015);function x(){let e=(0,y.getUserDataDir)();return e?f.join(e,"com.vercel.cli"):null}async function w(e){let r=(0,v.readAuthConfig)();if(!r?.token)throw new k.AccessTokenMissingError;if((0,v.isValidAccessToken)(r,e?.expirationBufferMs))return r.token;if(!r.refreshToken)throw(0,v.writeAuthConfig)({}),new k.RefreshAccessTokenFailedError("No refresh token available");try{let e=await (0,b.refreshTokenRequest)({refresh_token:r.refreshToken}),[t,n]=await (0,b.processTokenResponse)(e);if(t||!n)throw(0,v.writeAuthConfig)({}),new k.RefreshAccessTokenFailedError(t);let o={token:n.access_token,expiresAt:Math.floor(Date.now()/1e3)+n.expires_in};return n.refresh_token&&(o.refreshToken=n.refresh_token),(0,v.writeAuthConfig)(o),o.token}catch(e){if((0,v.writeAuthConfig)({}),e instanceof k.AccessTokenMissingError||e instanceof k.RefreshAccessTokenFailedError)throw e;throw new k.RefreshAccessTokenFailedError(e)}}async function O(e,r,t){let n=`https://api.vercel.com/v1/projects/${r}/token?source=vercel-oidc-refresh${t?`&teamId=${t}`:""}`,o=await fetch(n,{method:"POST",headers:{Authorization:`Bearer ${e}`}});if(!o.ok)throw new h.VercelOidcTokenError(`Failed to refresh OIDC token: ${o.statusText}`);let i=await o.json();return j(i),i}function j(e){if(!e||"object"!=typeof e)throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in e)||"string"!=typeof e.token)throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function _(){let e=(0,y.findRootDir)();if(!e)throw new h.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let r=f.join(e,".vercel","project.json");if(!g.existsSync(r))throw new h.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let t=JSON.parse(g.readFileSync(r,"utf8"));if("string"!=typeof t.projectId&&"string"!=typeof t.orgId)throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:t.projectId,teamId:t.orgId}}function T(e,r){let t=(0,y.getUserDataDir)();if(!t)throw new h.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let n=f.join(t,"com.vercel.token",`${r}.json`),o=JSON.stringify(e);g.mkdirSync(f.dirname(n),{mode:504,recursive:!0}),g.writeFileSync(n,o),g.chmodSync(n,432)}function A(e){let r=(0,y.getUserDataDir)();if(!r)throw new h.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let t=f.join(r,"com.vercel.token",`${e}.json`);if(!g.existsSync(t))return null;let n=JSON.parse(g.readFileSync(t,"utf8"));return j(n),n}function I(e){let r=e.split(".");if(3!==r.length)throw new h.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let t=r[1].replace(/-/g,"+").replace(/_/g,"/"),n=t.padEnd(t.length+(4-t.length%4)%4,"=");return JSON.parse(Buffer.from(n,"base64").toString("utf8"))}function P(e,r=0){return 1e3*e.exp<Date.now()+r}},600373,e=>{"use strict";var r=e.i(416487),t=e.i(256485),n=e.i(528909),o=e.i(733164),i=e.i(731699),s=e.i(235072),a=e.i(344963);e.s(["getAIModel",0,function(e){let l=e.embeddingModelId;l.includes("/")&&(l=l.split("/")[1]);let d=e.embeddingApiKey?.trim()||"NO_API_KEY_PROVIDED_FROM_UI";if(e.embeddingModelId.startsWith("custom:")){let r=e.embeddingModelId.slice(7),n=(e.customEmbeddings??[]).find(e=>e.modelName===r);if(n)return(0,t.createOpenAICompatible)({name:"custom_provider",baseURL:n.baseUrl,apiKey:n.apiKey||e.embeddingApiKey||void 0}).embeddingModel(n.modelName)}return"deepseek"===e.embeddingProvider?(0,n.createDeepSeek)({apiKey:d}).embeddingModel(l):"google"===e.embeddingProvider?(0,o.createGoogleGenerativeAI)({apiKey:d}).textEmbeddingModel(l):"cohere"===e.embeddingProvider?(0,i.createCohere)({apiKey:d}).embedding(l):"mistral"===e.embeddingProvider?(0,s.createMistral)({apiKey:d}).embedding(l):"vercel_ai_gateway"===e.embeddingProvider?(0,a.createGateway)({apiKey:d}).embedding(e.embeddingModelId):(0,r.createOpenAI)({apiKey:d}).embedding(l)}])},192389,e=>{"use strict";e.s(["formatErrorMessage",0,function(e){let r=e instanceof Error?e.message:String(e),t=r.toLowerCase();return t.includes("authentication failed")||t.includes("invalid api key")||t.includes("invalid api_key")||t.includes("invalid token")||t.includes("unauthorized")||t.includes("status code 401")?"Authentication failed. Check the API key for the selected provider.":r.includes("Is the docker daemon running?")?"Docker is not running. Please make sure the Docker daemon is started.":r.includes("fetch failed")||r.includes("Failed to fetch")?"Network error. Please check your connection and try again.":r}])},225970,e=>{e.v(e=>Promise.resolve().then(()=>e(65048)))},953341,e=>{e.v(r=>Promise.all(["server/chunks/15sd_@vercel_oidc_dist_token_10ruti0.js"].map(r=>e.l(r))).then(()=>r(624299)))}];
2
2
 
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__1xuhh_i._.js.map
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__16jk_se._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[367165,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(638725),n=e.i(192441);async function s(){let e=await (0,n.getDataDir)();if(!e)return a.DEFAULT_CONFIG;try{let n=await t.promises.readFile(r.default.join(e,"config.json"),"utf8"),s=JSON.parse(n),i=s.customEmbeddings,o=s.embeddingModelId;if(s.customEmbedding&&!i?.length){let e=s.customEmbedding;i=[e],"custom"===o&&(o=`custom:${e.modelName}`)}let l={...a.DEFAULT_CONFIG,...s,embeddingModelId:o??a.DEFAULT_CONFIG.embeddingModelId,customEmbeddings:i,chunking:{...a.DEFAULT_CONFIG.chunking,...s.chunking},storeConfig:{...a.DEFAULT_CONFIG.storeConfig,...s.storeConfig}};return delete l.customEmbedding,l}catch{return a.DEFAULT_CONFIG}}async function i(e){let a=await (0,n.requireDataDir)(),s={...e,updatedAt:new Date().toISOString()};return await t.promises.writeFile(r.default.join(a,"config.json"),JSON.stringify(s,null,2),"utf8"),s}e.s(["readConfig",0,s,"writeConfig",0,i])},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},700259,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(761095),n=e.i(666680),s=e.i(874533),i=e.i(812057),o=e.i(367165);let l=(0,i.promisify)(s.exec);async function c(e,t){return l(e,{timeout:t,env:{...process.env,PATH:`${process.env.PATH||""}:/usr/local/bin:/opt/homebrew/bin:/bin:/usr/bin`}})}let u=r.default.join(process.cwd(),".larkup"),d=r.default.join(u,"firecrawl-local.json"),p=r.default.join(u,"firecrawl","docker-compose.yml"),m="ragtoolkit-firecrawl";async function h(e){return new Promise((t,r)=>{let n=a.default.createServer();n.listen(e,()=>{let e=n.address().port;n.close(()=>t(e))}),n.on("error",a=>{"EADDRINUSE"===a.code?h(0===e?0:e+1).then(t,r):r(a)})})}async function w(){try{let e=r.default.join(process.cwd(),"proxies.txt"),a=(await t.promises.readFile(e,"utf8")).split("\n").map(e=>e.trim()).filter(e=>e.length>0);if(a.length>0){let e=a[Math.floor(Math.random()*a.length)].split(":");if(e.length>=4)return{server:`http://${e[0]}:${e[1]}`,username:e[2],password:e[3]}}}catch(e){}let e=await (0,o.readConfig)();return e.useScraperProxy&&e.scraperProxyServer?{server:e.scraperProxyServer,username:e.scraperProxyUsername,password:e.scraperProxyPassword}:null}let f={running:!1,endpoint:"http://localhost:3002",apiKey:"",port:3002,project:m};async function g(){try{let e=await t.promises.readFile(d,"utf8");return{...f,...JSON.parse(e)}}catch{return f}}async function R(e){return await t.promises.mkdir(u,{recursive:!0}),await t.promises.writeFile(d,JSON.stringify(e,null,2),"utf8"),e}async function v(){try{await c("docker --version")}catch(e){return console.error("DOCKER ERR:",e),{docker:!1,compose:null}}try{return await c("docker compose version"),{docker:!0,compose:"docker compose"}}catch(e){console.error("DOCKER COMPOSE ERR:",e)}try{return await c("docker-compose version"),{docker:!0,compose:"docker-compose"}}catch{return{docker:!0,compose:null}}}async function E(){let{docker:e,compose:t}=await v();return e?t?{docker:!0,compose:!0,message:"Docker is ready."}:{docker:!0,compose:!1,message:"Docker is installed but the Compose plugin was not found. Install `docker compose` to launch Firecrawl locally."}:{docker:!1,compose:!1,message:"Docker isn't available on this machine. Install Docker Desktop (or the Docker engine) and make sure it's running."}}function y(e,t,r){let a=r?[`PROXY_SERVER: "${r.server}"`,...r.username&&r.password?[`PROXY_USERNAME: "${r.username}"`,`PROXY_PASSWORD: "${r.password}"`]:[]]:[],n=['PORT: "3000"',...a].map(e=>` ${e}`).join("\n"),s=['PORT: "3002"',...a,'HOST: "0.0.0.0"','REDIS_URL: "redis://redis:6379"','REDIS_RATE_LIMIT_URL: "redis://redis:6379"','PLAYWRIGHT_MICROSERVICE_URL: "http://playwright-service:3000/scrape"','USE_DB_AUTHENTICATION: "false"',`TEST_API_KEY: "${e}"`,`BULL_AUTH_KEY: "${e}"`,'DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_RABBITMQ_URL: "amqp://user:password@rabbitmq:5672"'].map(e=>` ${e}`).join("\n");return`# Auto-generated by RAG Toolkit. Do not edit by hand.
1
+ module.exports=[367165,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(638725),n=e.i(192441);async function i(){let e=await (0,n.getDataDir)();if(!e)return a.DEFAULT_CONFIG;try{let n=await t.promises.readFile(r.default.join(e,"config.json"),"utf8"),i=JSON.parse(n),s=i.customEmbeddings,o=i.embeddingModelId;if(i.customEmbedding&&!s?.length){let e=i.customEmbedding;s=[e],"custom"===o&&(o=`custom:${e.modelName}`)}let l={...a.DEFAULT_CONFIG,...i,embeddingModelId:o??a.DEFAULT_CONFIG.embeddingModelId,customEmbeddings:s,chunking:{...a.DEFAULT_CONFIG.chunking,...i.chunking},storeConfig:{...a.DEFAULT_CONFIG.storeConfig,...i.storeConfig}};return delete l.customEmbedding,l}catch{return a.DEFAULT_CONFIG}}async function s(e){let a=await (0,n.requireDataDir)(),i={...e,updatedAt:new Date().toISOString()};return await t.promises.writeFile(r.default.join(a,"config.json"),JSON.stringify(i,null,2),"utf8"),i}e.s(["readConfig",0,i,"writeConfig",0,s])},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},700259,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(761095),n=e.i(666680),i=e.i(874533),s=e.i(812057),o=e.i(367165);let l=(0,s.promisify)(i.exec);async function c(e,t){return l(e,{timeout:t,env:{...process.env,PATH:`${process.env.PATH||""}:/usr/local/bin:/opt/homebrew/bin:/bin:/usr/bin`}})}let u=r.default.join(process.cwd(),".larkup"),d=r.default.join(u,"firecrawl-local.json"),p=r.default.join(u,"firecrawl","docker-compose.yml"),h="ragtoolkit-firecrawl";async function m(e){return new Promise((t,r)=>{let n=a.default.createServer();n.listen(e,()=>{let e=n.address().port;n.close(()=>t(e))}),n.on("error",a=>{"EADDRINUSE"===a.code?m(0===e?0:e+1).then(t,r):r(a)})})}async function f(){try{let e=r.default.join(process.cwd(),"proxies.txt"),a=(await t.promises.readFile(e,"utf8")).split("\n").map(e=>e.trim()).filter(e=>e.length>0);if(a.length>0){let e=a[Math.floor(Math.random()*a.length)].split(":");if(e.length>=4)return{server:`http://${e[0]}:${e[1]}`,username:e[2],password:e[3]}}}catch(e){}let e=await (0,o.readConfig)();return e.useScraperProxy&&e.scraperProxyServer?{server:e.scraperProxyServer,username:e.scraperProxyUsername,password:e.scraperProxyPassword}:null}let w={running:!1,endpoint:"http://localhost:3002",apiKey:"",port:3002,project:h};async function g(){try{let e=await t.promises.readFile(d,"utf8");return{...w,...JSON.parse(e)}}catch{return w}}async function R(e){return await t.promises.mkdir(u,{recursive:!0}),await t.promises.writeFile(d,JSON.stringify(e,null,2),"utf8"),e}async function v(){try{await c("docker --version")}catch(e){return console.error("DOCKER ERR:",e),{docker:!1,compose:null}}try{return await c("docker compose version"),{docker:!0,compose:"docker compose"}}catch(e){console.error("DOCKER COMPOSE ERR:",e)}try{return await c("docker-compose version"),{docker:!0,compose:"docker-compose"}}catch{return{docker:!0,compose:null}}}async function E(){let{docker:e,compose:t}=await v();return e?t?{docker:!0,compose:!0,message:"Docker is ready."}:{docker:!0,compose:!1,message:"Docker is installed but the Compose plugin was not found. Install `docker compose` to launch Firecrawl locally."}:{docker:!1,compose:!1,message:"Docker isn't available on this machine. Install Docker Desktop (or the Docker engine) and make sure it's running."}}function y(e,t,r){let a=r?[`PROXY_SERVER: "${r.server}"`,...r.username&&r.password?[`PROXY_USERNAME: "${r.username}"`,`PROXY_PASSWORD: "${r.password}"`]:[]]:[],n=['PORT: "3000"',...a].map(e=>` ${e}`).join("\n"),i=['PORT: "3002"',...a,'HOST: "0.0.0.0"','REDIS_URL: "redis://redis:6379"','REDIS_RATE_LIMIT_URL: "redis://redis:6379"','PLAYWRIGHT_MICROSERVICE_URL: "http://playwright-service:3000/scrape"','USE_DB_AUTHENTICATION: "false"',`TEST_API_KEY: "${e}"`,`BULL_AUTH_KEY: "${e}"`,'DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_RABBITMQ_URL: "amqp://user:password@rabbitmq:5672"'].map(e=>` ${e}`).join("\n");return`# Auto-generated by RAG Toolkit. Do not edit by hand.
2
2
  services:
3
3
  db:
4
4
  image: ghcr.io/firecrawl/nuq-postgres:latest
@@ -6,6 +6,11 @@ services:
6
6
  POSTGRES_USER: user
7
7
  POSTGRES_PASSWORD: password
8
8
  POSTGRES_DB: postgres
9
+ healthcheck:
10
+ test: ["CMD-SHELL", "pg_isready -U user -d postgres"]
11
+ interval: 5s
12
+ timeout: 5s
13
+ retries: 12
9
14
  restart: unless-stopped
10
15
 
11
16
  rabbitmq:
@@ -24,6 +29,11 @@ services:
24
29
  redis:
25
30
  image: redis:alpine
26
31
  command: redis-server --save "" --appendonly no
32
+ healthcheck:
33
+ test: ["CMD", "redis-cli", "ping"]
34
+ interval: 5s
35
+ timeout: 3s
36
+ retries: 12
27
37
  restart: unless-stopped
28
38
 
29
39
  playwright-service:
@@ -35,15 +45,17 @@ ${n}
35
45
  api:
36
46
  image: ghcr.io/firecrawl/firecrawl:latest
37
47
  depends_on:
38
- - db
39
- - rabbitmq
40
- - redis
41
- - playwright-service
48
+ db:
49
+ condition: service_healthy
50
+ rabbitmq:
51
+ condition: service_healthy
52
+ redis:
53
+ condition: service_healthy
42
54
  ports:
43
55
  - "${t}:3002"
44
56
  environment:
45
- ${s}
57
+ ${i}
46
58
  restart: unless-stopped
47
- `}async function S(){let e=await E();if(!e.compose)return R({...await g(),running:!1,lastError:e.message});let{compose:a}=await v(),s=await g(),i=s.apiKey||`fc-local-${(0,n.randomUUID)()}`,o=s.port||3002,l=await w();await t.promises.mkdir(r.default.dirname(p),{recursive:!0}),await t.promises.writeFile(p,y(i,o,l),"utf8");try{await c(`${a} -p ${m} -f "${p}" up -d`,18e4)}catch(r){let e=r instanceof Error?r.message:"docker compose failed";if(!(e.includes("address already in use")||e.includes("Ports are not available")))return R({...s,apiKey:i,port:o,running:!1,lastError:e});try{o=await h(o+1),await t.promises.writeFile(p,y(i,o,l),"utf8"),await c(`${a} -p ${m} -f "${p}" up -d`,18e4)}catch(e){return R({...s,apiKey:i,port:o,running:!1,lastError:e instanceof Error?e.message:"docker compose retry failed"})}}let u=(0,t.existsSync)("/.dockerenv"),d=`http://${u?"host.docker.internal":"localhost"}:${o}`,f=await _(d,6e4);return R({running:f,endpoint:d,apiKey:i,port:o,project:m,startedAt:new Date().toISOString(),lastError:f?void 0:"Containers started but the API did not become healthy in time. It may still be warming up — try refreshing in a moment."})}async function b(){let{compose:e}=await v(),t=await g();if(e)try{await c(`${e} -p ${m} -f "${p}" down`,6e4)}catch{}return R({...t,running:!1,startedAt:void 0})}async function A(){let e=await g();if(!e.startedAt)return e;let t=await k(e.endpoint);return t!==e.running?R({...e,running:t}):e}async function k(e){try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(4e3)})).status>0}catch{return!1}}async function _(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await k(e))return!0;await new Promise(e=>setTimeout(e,3e3))}return!1}let C="http://firecrawl-api:3002";async function D(){return"true"===process.env.DOCKER_ENV||"1"===process.env.DOCKER_BUILD||(0,t.existsSync)("/.dockerenv")?{available:await k(C),endpoint:C}:{available:!1,endpoint:""}}async function T(){let{available:e}=await D();return e?R({running:!0,endpoint:C,apiKey:`fc-docker-${(0,n.randomUUID)()}`,port:3002,project:"docker-sibling",startedAt:new Date().toISOString()}):R({...f,running:!1,lastError:"Firecrawl sibling service is not running. Restart with: docker compose --profile crawler up"})}e.s(["checkDocker",0,E,"checkDockerSibling",0,D,"connectDockerSibling",0,T,"readLocalState",0,g,"refreshLocalStatus",0,A,"startLocal",0,S,"stopLocal",0,b])},231344,e=>{"use strict";var t=e.i(239441),r=e.i(449055),a=e.i(391328),n=e.i(6352),s=e.i(746789),i=e.i(423437),o=e.i(178820),l=e.i(569191),c=e.i(576251),u=e.i(199962),d=e.i(547545),p=e.i(664046),m=e.i(235691),h=e.i(298907),w=e.i(110763),f=e.i(193695);e.i(673243);var g=e.i(236167),R=e.i(766576),v=e.i(700259),E=e.i(902157);function y(){return process.env.TAURI_ENV_PLATFORM||process.env.TAURI_ENV_ARCH?"desktop":"true"===process.env.DOCKER_ENV||"1"===process.env.DOCKER_BUILD||(0,E.existsSync)("/.dockerenv")?"docker":"web"}async function S(){let e=y();if("docker"===e){let[t,r]=await Promise.all([(0,v.refreshLocalStatus)(),(0,v.checkDockerSibling)()]),{apiKey:a,...n}=t;return R.NextResponse.json({state:{...n,hasKey:!!a,running:t.running||r.available,endpoint:r.available?r.endpoint:n.endpoint},docker:{docker:!0,compose:r.available,message:r.available?"Crawler service is running.":"Crawler service is not running. Restart with: docker compose --profile crawler up"},runtimeEnv:e})}let[t,r]=await Promise.all([(0,v.refreshLocalStatus)(),(0,v.checkDocker)()]),{apiKey:a,...n}=t;return R.NextResponse.json({state:{...n,hasKey:!!a},docker:r,runtimeEnv:e})}async function b(e){let t,r=y();try{({action:t}=await e.json())}catch{return R.NextResponse.json({error:"Invalid request body."},{status:400})}if("start"!==t&&"stop"!==t)return R.NextResponse.json({error:'action must be "start" or "stop".'},{status:400});if("docker"===r)if("start"===t){let{apiKey:e,...t}=await (0,v.connectDockerSibling)();return R.NextResponse.json({state:{...t,hasKey:!!e}})}else{let{apiKey:e,...t}=await (0,v.readLocalState)();return R.NextResponse.json({state:{...t,running:!1,hasKey:!!e}})}let{apiKey:a,...n}="start"===t?await (0,v.startLocal)():await (0,v.stopLocal)();return R.NextResponse.json({state:{...n,hasKey:!!a}})}e.s(["GET",0,S,"POST",0,b,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],705563);var A=e.i(705563);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/firecrawl/local/route",pathname:"/api/firecrawl/local",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/firecrawl/local/route.ts",nextConfigOutput:"standalone",userland:A,...{}}),{workAsyncStorage:_,workUnitAsyncStorage:C,serverHooks:D}=k;async function T(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),k.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/firecrawl/local/route";R=R.replace(/\/index$/,"")||"/";let v=await k.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:E,deploymentId:y,params:S,nextConfig:b,parsedUrl:A,isDraftMode:_,prerenderManifest:C,routerServerContext:D,isOnDemandRevalidate:T,revalidateOnlyGenerated:O,resolvedPathname:P,clientReferenceManifest:x,serverActionsManifest:I}=v,N=(0,o.normalizeAppPath)(R),U=!!(C.dynamicRoutes[N]||C.routes[P]),$=async()=>((null==D?void 0:D.render404)?await D.render404(e,t,A,!1):t.end("This page could not be found"),null);if(U&&!_){let e=!!C.routes[P],t=C.dynamicRoutes[N];if(t&&!1===t.fallback&&!e){if(b.adapterPath)return await $();throw new f.NoFallbackError}}let L=null;!U||k.isDev||_||(L="/index"===(L=P)?"/":L);let q=!0===k.isDev||!U,F=U&&!q;I&&x&&(0,i.setManifestsSingleton)({page:R,clientReferenceManifest:x,serverActionsManifest:I});let j=e.method||"GET",M=(0,s.getTracer)(),H=M.getActiveScopeSpan(),K=!!(null==D?void 0:D.isWrappedByNextServer),B=!!(0,n.getRequestMeta)(e,"minimalMode"),G=(0,n.getRequestMeta)(e,"incrementalCache")||await k.getIncrementalCache(e,b,C,B);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let V={params:S,previewProps:C.preview,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts},cacheComponents:!!b.cacheComponents,supportsDynamicResponse:q,incrementalCache:G,cacheLifeProfiles:b.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>k.onRequestError(e,t,a,n,D)},sharedContext:{buildId:E,deploymentId:y}},W=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),Y=c.NextRequestAdapter.fromNodeNextRequest(W,(0,c.signalFromNodeResponse)(t));try{let n,i=async e=>k.handle(Y,V).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${j} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${j} ${R}`)}),o=async n=>{var s,o;let l=async({previousCacheEntry:r})=>{try{if(!B&&T&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await i(n);e.fetchMetrics=V.renderOpts.fetchMetrics;let o=V.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=V.renderOpts.collectedTags;if(!U)return await (0,p.sendResponse)(W,X,s,V.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[w.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=w.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,a=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=w.INFINITE_CACHE?void 0:V.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await k.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:T})},!1,D),t}},c=await k.handleResponse({req:e,nextConfig:b,cacheKey:L,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:O,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:B});if(!U)return null;if((null==c||null==(s=c.value)?void 0:s.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(o=c.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",T?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,m.fromNodeOutgoingHttpHeaders)(c.value.headers);return B&&U||u.delete(w.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,h.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(W,X,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};K&&H?await o(H):(n=M.getActiveScopeSpan(),await M.withPropagatedContext(e.headers,()=>M.trace(u.BaseServerSpan.handleRequest,{spanName:`${j} ${R}`,kind:s.SpanKind.SERVER,attributes:{"http.method":j,"http.target":e.url}},o),void 0,!K))}catch(t){if(t instanceof f.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:N,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:T})},!1,D),U)throw t;return await (0,p.sendResponse)(W,X,new Response(null,{status:500})),null}}e.s(["handler",0,T,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:C})},"routeModule",0,k,"serverHooks",0,D,"workAsyncStorage",0,_,"workUnitAsyncStorage",0,C],231344)}];
59
+ `}async function b(){let e=await E();if(!e.compose)return R({...await g(),running:!1,lastError:e.message});let{compose:a}=await v(),i=await g(),s=i.apiKey||`fc-local-${(0,n.randomUUID)()}`,o=i.port||3002,l=await f();await t.promises.mkdir(r.default.dirname(p),{recursive:!0}),await t.promises.writeFile(p,y(s,o,l),"utf8");try{await c(`${a} -p ${h} -f "${p}" up -d`,18e4)}catch(r){let e=r instanceof Error?r.message:"docker compose failed";if(!(e.includes("address already in use")||e.includes("Ports are not available")))return R({...i,apiKey:s,port:o,running:!1,lastError:e});try{o=await m(o+1),await t.promises.writeFile(p,y(s,o,l),"utf8"),await c(`${a} -p ${h} -f "${p}" up -d`,18e4)}catch(e){return R({...i,apiKey:s,port:o,running:!1,lastError:e instanceof Error?e.message:"docker compose retry failed"})}}let u=(0,t.existsSync)("/.dockerenv"),d=`http://${u?"host.docker.internal":"localhost"}:${o}`,w=await _(d,9e4);return R({running:w,endpoint:d,apiKey:s,port:o,project:h,startedAt:new Date().toISOString(),lastError:w?void 0:"Containers started but the API did not become healthy in time. It may still be warming up — try refreshing in a moment."})}async function S(){let{compose:e}=await v(),t=await g();if(e)try{await c(`${e} -p ${h} -f "${p}" down`,6e4)}catch{}return R({...t,running:!1,startedAt:void 0})}async function A(){let e=await g();if(!e.startedAt)return e;let t=await k(e.endpoint);return t!==e.running?R({...e,running:t}):e}async function k(e){try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(4e3)})).status>0}catch{return!1}}async function _(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await k(e))return!0;await new Promise(e=>setTimeout(e,3e3))}return!1}let D="http://firecrawl-api:3002";async function C(){return"true"===process.env.DOCKER_ENV||"1"===process.env.DOCKER_BUILD||(0,t.existsSync)("/.dockerenv")?{available:await k(D),endpoint:D}:{available:!1,endpoint:""}}async function T(){let{available:e}=await C();return e?R({running:!0,endpoint:D,apiKey:`fc-docker-${(0,n.randomUUID)()}`,port:3002,project:"docker-sibling",startedAt:new Date().toISOString()}):R({...w,running:!1,lastError:"The web crawler service is not available in this Docker deployment."})}e.s(["checkDocker",0,E,"checkDockerSibling",0,C,"connectDockerSibling",0,T,"readLocalState",0,g,"refreshLocalStatus",0,A,"startLocal",0,b,"stopLocal",0,S])},231344,e=>{"use strict";var t=e.i(239441),r=e.i(449055),a=e.i(391328),n=e.i(6352),i=e.i(746789),s=e.i(423437),o=e.i(178820),l=e.i(569191),c=e.i(576251),u=e.i(199962),d=e.i(547545),p=e.i(664046),h=e.i(235691),m=e.i(298907),f=e.i(110763),w=e.i(193695);e.i(673243);var g=e.i(236167),R=e.i(766576),v=e.i(700259),E=e.i(902157);function y(){return process.env.TAURI_ENV_PLATFORM||process.env.TAURI_ENV_ARCH?"desktop":"true"===process.env.DOCKER_ENV||"1"===process.env.DOCKER_BUILD||(0,E.existsSync)("/.dockerenv")?"docker":"web"}async function b(){let e=y();if("docker"===e){let[t,r]=await Promise.all([(0,v.refreshLocalStatus)(),(0,v.checkDockerSibling)()]),{apiKey:a,...n}=t;return R.NextResponse.json({state:{...n,hasKey:!!a,running:t.running||r.available,endpoint:r.available?r.endpoint:n.endpoint},docker:{docker:!0,compose:r.available,message:r.available?"Crawler service is running.":"Crawler service is not available for this Docker installation."},runtimeEnv:e})}let[t,r]=await Promise.all([(0,v.refreshLocalStatus)(),(0,v.checkDocker)()]),{apiKey:a,...n}=t;return R.NextResponse.json({state:{...n,hasKey:!!a},docker:r,runtimeEnv:e})}async function S(e){let t,r=y();try{({action:t}=await e.json())}catch{return R.NextResponse.json({error:"Invalid request body."},{status:400})}if("start"!==t&&"stop"!==t)return R.NextResponse.json({error:'action must be "start" or "stop".'},{status:400});if("docker"===r)if("start"===t){let{apiKey:e,...t}=await (0,v.connectDockerSibling)();return R.NextResponse.json({state:{...t,hasKey:!!e}})}else{let{apiKey:e,...t}=await (0,v.readLocalState)();return R.NextResponse.json({state:{...t,running:!1,hasKey:!!e}})}let{apiKey:a,...n}="start"===t?await (0,v.startLocal)():await (0,v.stopLocal)();return R.NextResponse.json({state:{...n,hasKey:!!a}})}e.s(["GET",0,b,"POST",0,S,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],705563);var A=e.i(705563);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/firecrawl/local/route",pathname:"/api/firecrawl/local",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/firecrawl/local/route.ts",nextConfigOutput:"standalone",userland:A,...{}}),{workAsyncStorage:_,workUnitAsyncStorage:D,serverHooks:C}=k;async function T(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),k.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/firecrawl/local/route";R=R.replace(/\/index$/,"")||"/";let v=await k.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:E,deploymentId:y,params:b,nextConfig:S,parsedUrl:A,isDraftMode:_,prerenderManifest:D,routerServerContext:C,isOnDemandRevalidate:T,revalidateOnlyGenerated:O,resolvedPathname:P,clientReferenceManifest:x,serverActionsManifest:I}=v,N=(0,o.normalizeAppPath)(R),U=!!(D.dynamicRoutes[N]||D.routes[P]),L=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,A,!1):t.end("This page could not be found"),null);if(U&&!_){let e=!!D.routes[P],t=D.dynamicRoutes[N];if(t&&!1===t.fallback&&!e){if(S.adapterPath)return await L();throw new w.NoFallbackError}}let $=null;!U||k.isDev||_||($="/index"===($=P)?"/":$);let q=!0===k.isDev||!U,F=U&&!q;I&&x&&(0,s.setManifestsSingleton)({page:R,clientReferenceManifest:x,serverActionsManifest:I});let M=e.method||"GET",j=(0,i.getTracer)(),H=j.getActiveScopeSpan(),K=!!(null==C?void 0:C.isWrappedByNextServer),B=!!(0,n.getRequestMeta)(e,"minimalMode"),G=(0,n.getRequestMeta)(e,"incrementalCache")||await k.getIncrementalCache(e,S,D,B);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let V={params:b,previewProps:D.preview,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts},cacheComponents:!!S.cacheComponents,supportsDynamicResponse:q,incrementalCache:G,cacheLifeProfiles:S.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>k.onRequestError(e,t,a,n,C)},sharedContext:{buildId:E,deploymentId:y}},W=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),Y=c.NextRequestAdapter.fromNodeNextRequest(W,(0,c.signalFromNodeResponse)(t));try{let n,s=async e=>k.handle(Y,V).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=j.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${M} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${M} ${R}`)}),o=async n=>{var i,o;let l=async({previousCacheEntry:r})=>{try{if(!B&&T&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await s(n);e.fetchMetrics=V.renderOpts.fetchMetrics;let o=V.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=V.renderOpts.collectedTags;if(!U)return await (0,p.sendResponse)(W,X,i,V.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[f.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,a=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:V.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await k.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:T})},!1,C),t}},c=await k.handleResponse({req:e,nextConfig:S,cacheKey:$,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:D,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:O,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:B});if(!U)return null;if((null==c||null==(i=c.value)?void 0:i.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(o=c.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",T?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,h.fromNodeOutgoingHttpHeaders)(c.value.headers);return B&&U||u.delete(f.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,m.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(W,X,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};K&&H?await o(H):(n=j.getActiveScopeSpan(),await j.withPropagatedContext(e.headers,()=>j.trace(u.BaseServerSpan.handleRequest,{spanName:`${M} ${R}`,kind:i.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},o),void 0,!K))}catch(t){if(t instanceof w.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:N,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:T})},!1,C),U)throw t;return await (0,p.sendResponse)(W,X,new Response(null,{status:500})),null}}e.s(["handler",0,T,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:D})},"routeModule",0,k,"serverHooks",0,C,"workAsyncStorage",0,_,"workUnitAsyncStorage",0,D],231344)}];
48
60
 
49
61
  //# sourceMappingURL=%5Broot-of-the-server%5D__1ahdfq9._.js.map