1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5349],{27731:(e,r,t)=>{function n(e,r="en"){if(!e)return;if("ROW"===e)return"Outside EU";let t=e.split("-"),o=t.length>1?t[t.length-1]:e;if(o)try{return new Intl.DisplayNames([r],{type:"region"}).of(o.toUpperCase())}catch(e){console.warn(`Invalid region code: ${o}`,e);return}}function o(e){if(!e)return;let r=e.split("-"),t=r.length>1?r[r.length-1]:void 0,n=r[0]?.toLowerCase();return t?t.toUpperCase():({en:"GB",da:"DK",de:"DE",it:"IT",fr:"FR",nl:"NL",fi:"FI",sk:"SK",lb:"LU",cs:"CZ",hu:"HU",et:"EE",lt:"LT",lv:"LV",bg:"BG",pl:"PL"})[n]||void 0}t.d(r,{GZ:()=>n,gb:()=>o,oj:()=>s});let a=["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"];function s(e="en"){let r=new Intl.DisplayNames([e],{type:"region"});return a.map(e=>{let t=r.of(e);return t?{code:e,name:t}:null}).filter(e=>null!==e).sort((r,t)=>r.name.localeCompare(t.name,e))}},81319:(e,r,t)=>{t.d(r,{$:()=>l,e:()=>s});var n=t(81855),o=t(51853);t(49914),(o.A.defaultSite??"unknown").toLowerCase(),(o.A.api?.local?.apiHost??"").includes("stage");let a=["bot","crawler","spider","googlebot","bingbot","slurp","duckduckbot","baiduspider","yandexbot","facebookexternalhit","twitterbot","linkedinbot","embedly","quora link preview","showyoubot","outbrain","pinterest","applebot","semrushbot","ahrefsbot"];function s(e){if(!e)return!1;let r=e.toLowerCase();return a.some(e=>r.includes(e))}async function i(e){try{let r=await fetch(`https://get.geojs.io/v1/ip/country/${e}.json`,{signal:AbortSignal.timeout(3e3)});if(!r.ok)return n.logger.warn("geojs_http_error",{httpStatus:r.status}),null;let t=await r.json();return t.country?t.country.toUpperCase():null}catch(e){return n.logger.warn("geojs_request_failed",{error:e instanceof Error?e.message:"unknown"}),null}}async function l(e){if(!e||s(e.headers["user-agent"]))return null;let r=function(e){let r=e.headers["x-forwarded-for"];if(r){let e=Array.isArray(r)?r[0]:r;return e?.split(",")[0]?.trim()||null}let t=e.headers["x-real-ip"];return t&&"string"==typeof t?t:null}(e);return r?i(r):(n.logger.warn("geojs_no_client_ip"),null)}},88697:(e,r,t)=>{t.d(r,{j2:()=>C,Mt:()=>L});var n=t(97550),o=t(72612),a=t(81855),s=t(39077),i=t(23873),l=t(38973),u=t(43749),_=t(49914);let c=new Map,f=null,d=null;function p(e,r){let t=_.env[e];if(!t)return null;let n=`https://${t}.vault.azure.net`;return console.log(`${r} Key Vault URL:`,n),new u._V(n,new l.gv({loggingOptions:{enableUnsafeSupportLogging:!0}}))}async function h(e,r,t){if(!e)return null;try{return(await e.getSecret(r)).value||null}catch(e){return e?.statusCode===404||e?.code==="SecretNotFound"||e?.message?.includes("not found")||e?.message?.includes("ENOTFOUND")?console.debug(`Secret "${r}" not found in ${t} Key Vault (this is normal if secret exists in the other vault)`):console.warn(`Error fetching secret "${r}" from ${t} Key Vault:`,e),null}}async function g(...e){let r=await Promise.all(e.map(async e=>{let r=c.get(e);if(r&&Date.now()<r.expiresAt)return r.value;let{appClient:t,platformClient:n}=(!d&&_.env.APP_KEYVAULT_NAME&&(d=p("APP_KEYVAULT_NAME","App")),!f&&_.env.PLATFORM_KEYVAULT_NAME&&(f=p("PLATFORM_KEYVAULT_NAME","Platform")),{appClient:d,platformClient:f}),[o,a]=await Promise.all([h(t,e,"App"),h(n,e,"Platform")]),s=o??a;if(s)return c.set(e,{value:s,expiresAt:Date.now()+27e5}),s;let i=e.replace(/-/g,"_").toUpperCase(),l=_.env[i];if(l)return l;let u=[t&&"APP_KEYVAULT_NAME",n&&"PLATFORM_KEYVAULT_NAME"].filter(
1Boolean).join(", ");throw Error(`Secret ${e} not found in ${u?`Key Vaults (${u}) or `:""}environment variables (${i})`)}));return 1===r.length?r[0]:r}var T=t(49914);let k=(0,o.e)(),A=new Map;function S(e){return e?`...${e.slice(-8)}`:"none"}async function w(e,r,t,n,o){let s=await fetch(`${o}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:t,client_secret:n,grant_type:"refresh_token",refresh_token:r,scope:"openid profile email"})}),i=await s.json();if(!s.ok)throw a.logger.error("auth0_token_refresh_rejected",{userId:e,httpStatus:s.status,auth0Error:i.error,auth0ErrorDescription:i.error_description,refreshTokenTail:S(r)}),i;let l=!!i.refresh_token&&i.refresh_token!==r;return a.logger.info("auth0_token_refresh_success",{userId:e,expiresInSeconds:i.expires_in,refreshTokenRotated:l,oldRefreshTokenTail:S(r),newRefreshTokenTail:S(i.refresh_token)}),{access_token:i.access_token,expires_at:Math.floor(Date.now()/1e3+i.expires_in),refresh_token:i.refresh_token??r}}let{handlers:E,signIn:I,signOut:M,auth:C}=(0,s.Ay)(async e=>{let[r,t,o]=await g("AUTH0-CLIENT-SECRET","FE--NEXTAUTH-SECRET","OpenFgaClientOptions--ApiKey");return{providers:[(0,i.A)({clientId:T.env.AUTH0_CLIENT_ID,clientSecret:r,issuer:T.env.AUTH0_ISSUER,authorization:{params:{scope:"openid profile email offline_access",organization:T.env.AUTH0_ORGANIZATION_ID,audience:T.env.AUTH0_AUDIENCE}}})],secret:t,debug:!1,callbacks:{async jwt({token:t,account:n}){if(n){t.access_token=n.access_token,t.id_token=n.id_token,t.refresh_token=n.refresh_token,t.expires_at=n.expires_at,t.user_id=n.providerAccountId,a.logger.info("jwt_callback_initial_login",{userId:t.user_id,expiresAt:new Date(1e3*n.expires_at).toISOString(),hasRefreshToken:!!n.refresh_token,refreshTokenTail:S(n.refresh_token)});try{await y(t,e)}catch(e){a.logger.error("add_profile_failed_on_login",{userId:t.user_id,error:String(e)})}return t}if(t.error)return a.logger.warn("jwt_callback_zombie_session",{userId:t.user_id,error:t.error,hasRefreshToken:!!t.refresh_token}),t;if(Date.now()<1e3*t.expires_at)return t;let o=Date.now()-1e3*t.expires_at;if(!t.refresh_token)throw a.logger.error("jwt_callback_missing_refresh_token",{userId:t.user_id,expiredAgoMs:o,expiresAt:new Date(1e3*t.expires_at).toISOString()}),TypeError("Missing refresh_token");a.logger.info("jwt_callback_token_expired",{userId:t.user_id,expiredAgoMs:o,expiresAt:new Date(1e3*t.expires_at).toISOString(),refreshTokenTail:S(t.refresh_token)});try{let e=await function(e,r,t,n,o){let s=A.get(e);if(s)return a.logger.info("auth0_token_refresh_deduplicated",{userId:e,refreshTokenTail:S(r)}),s;let i=w(e,r,t,n,o).finally(()=>{A.delete(e)});return A.set(e,i),i}(t.user_id,t.refresh_token,T.env.AUTH0_CLIENT_ID,r,T.env.AUTH0_ISSUER);return{...t,access_token:e.access_token,expires_at:e.expires_at,refresh_token:e.refresh_token}}catch(r){let e={userId:t.user_id,expiredAgoMs:o,auth0Error:r?.error,auth0ErrorDescription:r?.error_description,refreshTokenTail:S(t.refresh_token),errorRaw:JSON.stringify(r)};return o>36e5?a.logger.warn("jwt_callback_refresh_failed",e):a.logger.error("jwt_callback_refresh_failed",e),t.error="RefreshTokenError",delete t.refresh_token,t}},async session({session:e,token:r}){if(r.error)return a.logger.warn("session_callback_token_error",{userId:r.user_id,error:r.error}),e.error=r.error,e;if(e.access_token=r.access_token,e.id_token=r.id_token,e.refresh_token=r.refresh_token,e.expires_at=r.expires_at,e.user_id=r.user_id,r.access_token)try{let t=await fetch(`${k}/api/v1/my/info`,{method:"GET",headers:{Authorization:`Bearer ${r.access_token}`,"X-Country-Code":"SE"}});t.ok?e.userInfo=await t.json():a.logger.warn("session_callback_user_info_http_error",{userId:r.user_id,httpStatus:t.status})}catch(e){a.logger.error("session_callback_user_info_fetch_failed",{userId:r.user_id,error:String(e)})}try{if(T.env.FGA_API_URL&&T.env.FGA_STORE_ID&&T.env.FGA_MODEL_ID){let r=new n.OpenFgaClient({apiUrl:T.env.FGA_API_URL,storeId:T.env.FGA_STORE_ID,authorizationModelId:T.env.FGA_MODEL_ID,credentials:{method:n.CredentialsMethod.ApiToken,config:{token:o}}});if(e?.user_id){let t={user:`user:${e.user_id}`,object:"company:"};e.tuples=(await r.read(t)).tuples}}return e}catch(r){return a.logger.error("session_callback_openfga_failed",{userId:e?.user_id,error:String(r)}),e}}}}});async function y(e,r){let t={method:"POST",headers:{Authorization:`Bearer ${e.access_token}`,"Content-Type":"application/json"}},n={name:null,accountType:null,companyName:null,registrationNumber:null,phoneNumber:null,street:null,postalCode:null,city:null,newsletter:!1,language:null,regionCode:null};if(r)try{if(r.url.includes("state")&&r.url.includes("/api/auth")){let e=new URL(r.url).searchParams.get("state");e&&(n=JSON.parse(e),t.body=JSON.stringify(n),t.headers={...t.headers,"X-Language":n.language??"sv-SE"})}}catch(t){a.logger.error("add_profile_state_parse_failed",{userId:e.user_id,error:String(t),url:r?.url})}let o=await fetch(`${k}/api/v1/my/profile`,t);if(!o.ok){let r=await o.text().catch(()=>"unreadable");throw a.logger.error("add_profile_api_failed",{userId:e.user_id,httpStatus:o.status,responseBody:r.slice(0,500)}),Error(`Failed to create user profile (HTTP ${o.status})`)}}async function L(e){return await C(e)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.