1 line
8.5 KiB
JavaScript
1 line
8.5 KiB
JavaScript
(()=>{var e={};e.id=7778,e.ids=[7778],e.modules={3295:e=>{"use strict";e.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11723:e=>{"use strict";e.exports=require("querystring")},12412:e=>{"use strict";e.exports=require("assert")},14985:e=>{"use strict";e.exports=require("dns")},21820:e=>{"use strict";e.exports=require("os")},26690:(e,r,s)=>{"use strict";s.d(r,{N:()=>i});var t=s(1926),o=s(10591);function n(e){let r=process.env[e];if(!r)throw Error(`Missing required environment variable: ${e}`);return r}async function a(e){try{let r=await fetch(`${process.env.KEYCLOAK_ISSUER}/protocol/openid-connect/token`,{headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:process.env.KEYCLOAK_CLIENT_ID,client_secret:process.env.KEYCLOAK_CLIENT_SECRET,grant_type:"refresh_token",refresh_token:e.refreshToken||""}),method:"POST"}),s=await r.json();if(!r.ok)throw s;return{...e,accessToken:s.access_token,refreshToken:s.refresh_token??e.refreshToken,accessTokenExpires:Date.now()+1e3*s.expires_in}}catch(r){return console.error("Error refreshing access token:",r),{...e,error:"RefreshAccessTokenError"}}}let i={providers:[(0,t.A)({clientId:n("KEYCLOAK_CLIENT_ID"),clientSecret:n("KEYCLOAK_CLIENT_SECRET"),issuer:n("KEYCLOAK_ISSUER"),authorization:{params:{scope:"openid profile email roles"}},profile(e){console.log("Keycloak profile callback:",{rawProfile:e,rawRoles:e.roles,realmAccess:e.realm_access,groups:e.groups});let r=e.realm_access?.roles||[];console.log("Profile callback raw roles:",r);let s=r.map(e=>e.replace(/^ROLE_/,"").toLowerCase());return console.log("Profile callback cleaned roles:",s),{id:e.sub,name:e.name??e.preferred_username,email:e.email,first_name:e.given_name??"",last_name:e.family_name??"",username:e.preferred_username??e.email?.split("@")[0]??"",role:s}}})],session:{strategy:"jwt",maxAge:2592e3},callbacks:{async jwt({token:e,account:r,profile:s}){if(r&&s){let t=(s.realm_access?.roles||[]).map(e=>e.replace(/^ROLE_/,"").toLowerCase());e.accessToken=r.access_token??"",e.refreshToken=r.refresh_token??"",e.accessTokenExpires=r.expires_at??0,e.sub=s.sub,e.role=t,e.username=s.preferred_username??"",e.first_name=s.given_name??"",e.last_name=s.family_name??""}else if(e.accessToken)try{let r=(0,o.s)(e.accessToken);r.realm_access?.roles&&(e.role=r.realm_access.roles.map(e=>e.replace(/^ROLE_/,"").toLowerCase()))}catch(e){console.error("Error decoding token:",e)}return Date.now()<1e3*e.accessTokenExpires?e:a(e)},async session({session:e,token:r}){if(r.error)throw Error(r.error);let s=Array.isArray(r.role)?r.role:[];return e.user={id:r.sub??"",email:r.email??null,name:r.name??null,image:null,username:r.username??"",first_name:r.first_name??"",last_name:r.last_name??"",role:s,nextcloudInitialized:!1},e.accessToken=r.accessToken,e}},pages:{signIn:"/signin",error:"/signin"},debug:!1}},27910:e=>{"use strict";e.exports=require("stream")},28354:e=>{"use strict";e.exports=require("util")},29294:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-async-storage.external.js")},34631:e=>{"use strict";e.exports=require("tls")},41204:e=>{"use strict";e.exports=require("string_decoder")},44870:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},55511:e=>{"use strict";e.exports=require("crypto")},55591:e=>{"use strict";e.exports=require("https")},63033:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},68251:(e,r,s)=>{"use strict";s.r(r),s.d(r,{patchFetch:()=>k,routeModule:()=>m,serverHooks:()=>h,workAsyncStorage:()=>f,workUnitAsyncStorage:()=>g});var t={};s.r(t),s.d(t,{GET:()=>d});var o=s(96559),n=s(48088),a=s(37719),i=s(32190),l=s(35426),c=s(26690),u=s(36781);async function p(e){try{let r;if(!process.env.LEANTIME_TOKEN)return console.error("LEANTIME_TOKEN is not set in environment variables"),null;console.log("Fetching Leantime users for email:",e),console.log("API URL:",process.env.LEANTIME_API_URL),console.log("Token length:",process.env.LEANTIME_TOKEN.length);let s={"Content-Type":"application/json","X-API-Key":process.env.LEANTIME_TOKEN},t=await fetch(`${process.env.LEANTIME_API_URL}/api/jsonrpc`,{method:"POST",headers:s,body:JSON.stringify({jsonrpc:"2.0",method:"leantime.rpc.users.getAll",id:1})}),o=await t.text();if(console.log("Raw Leantime response:",o),!t.ok)return console.error("Failed to fetch Leantime users:",{status:t.status,statusText:t.statusText,headers:Object.fromEntries(t.headers.entries())}),null;try{r=JSON.parse(o)}catch(e){return console.error("Failed to parse Leantime response:",e),null}if(console.log("Leantime users response:",r),!r.result||!Array.isArray(r.result))return console.error("Invalid response format from Leantime users API"),null;let n=r.result.find(r=>r.username===e);return n?console.log("Found Leantime user:",{id:n.id,username:n.username}):console.log("No Leantime user found for username:",e),n?n.id:null}catch(e){return console.error("Error fetching Leantime user ID:",e),null}}async function d(e){try{let r,s=await (0,l.getServerSession)(c.N);if(!s?.user?.email)return i.NextResponse.json({error:"Unauthorized"},{status:401});let t=new URL(e.url);if("true"!==t.searchParams.get("refresh")){let e=await (0,u.ds)(s.user.id);if(e)return console.log(`Using cached tasks data for user ${s.user.id}`),i.NextResponse.json(e)}console.log("Fetching tasks for user:",s.user.email);let o=await p(s.user.email);if(!o)return console.error("User not found in Leantime"),i.NextResponse.json({error:"User not found in Leantime"},{status:404});console.log("Fetching tasks for Leantime user ID:",o);let n={"Content-Type":"application/json","X-API-Key":process.env.LEANTIME_TOKEN},a=await fetch(`${process.env.LEANTIME_API_URL}/api/jsonrpc`,{method:"POST",headers:n,body:JSON.stringify({jsonrpc:"2.0",method:"leantime.rpc.tickets.getAll",params:{userId:o,status:"all"},id:1})}),d=await a.text();if(console.log("Tasks API response status:",a.status),!a.ok)throw console.error("Failed to fetch tasks from Leantime:",{status:a.status,statusText:a.statusText}),Error("Failed to fetch tasks from Leantime");try{r=JSON.parse(d)}catch(e){throw console.error("Failed to parse tasks response"),Error("Invalid response format from Leantime")}if(!r.result||!Array.isArray(r.result))throw console.error("Invalid response format from Leantime tasks API"),Error("Invalid response format from Leantime");console.log("Received tasks count:",r.result.length),console.log("Task IDs:",r.result.map(e=>e.id));let m=r.result.filter(e=>{if(console.log("Raw task data:",{id:e.id,headline:e.headline,status:e.status,type:e.type,dependingTicketId:e.dependingTicketId}),5===e.status)return console.log(`Filtering out Done task ${e.id} (type: ${e.type||"main"}, status: ${e.status})`),!1;let r=String(e.editorId).trim(),s=String(o).trim(),t=r===s;return console.log(`Task ${e.id}: status=${e.status}, type=${e.type||"main"}, parentId=${e.dependingTicketId||"none"}, isUserEditor=${t}`),t}).map(e=>({id:e.id.toString(),headline:e.headline,projectName:e.projectName,projectId:e.projectId,status:e.status,dateToFinish:e.dateToFinish||null,milestone:e.type||null,details:e.description||null,createdOn:e.dateCreated,editedOn:e.editedOn||null,editorId:e.editorId,editorFirstname:e.editorFirstname,editorLastname:e.editorLastname,type:e.type||null,dependingTicketId:e.dependingTicketId||null}));return console.log(`Found ${m.length} tasks assigned to user ${o}`),await (0,u.to)(s.user.id,m),i.NextResponse.json(m)}catch(e){return console.error("Error in tasks route:",e),i.NextResponse.json({error:"Failed to fetch tasks"},{status:500})}}let m=new o.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/leantime/tasks/route",pathname:"/api/leantime/tasks",filename:"route",bundlePath:"app/api/leantime/tasks/route"},resolvedPagePath:"/Users/alma/Documents/NeahNew/app/api/leantime/tasks/route.ts",nextConfigOutput:"",userland:t}),{workAsyncStorage:f,workUnitAsyncStorage:g,serverHooks:h}=m;function k(){return(0,a.patchFetch)({workAsyncStorage:f,workUnitAsyncStorage:g})}},74075:e=>{"use strict";e.exports=require("zlib")},78335:()=>{},79428:e=>{"use strict";e.exports=require("buffer")},79551:e=>{"use strict";e.exports=require("url")},81630:e=>{"use strict";e.exports=require("http")},83997:e=>{"use strict";e.exports=require("tty")},91645:e=>{"use strict";e.exports=require("net")},94735:e=>{"use strict";e.exports=require("events")},96487:()=>{}};var r=require("../../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[4243,5419,580,8794,1642,6781],()=>s(68251));module.exports=t})(); |