import { Avgiver } from 'svv-hradm-dinside-brukerhandtering'; export class Sesjonsklient { private _sid: any; constructor(sid) { this._sid = sid; } async _leggTilValg(valg: any) { valg = valg || {}; valg.headers = valg.headers || {}; if (this._sid) { valg.credentials = valg.credentials || 'include'; valg.headers.SID = this._sid; // organisasjonsnummer skal kun settes for kall mot vår egen backend, og da er sid satt const orgnr = await this.hentOrgnr(); if (orgnr) { valg.headers.organisasjonsnummer = orgnr; } } return valg; } async hentOrgnr() { try { const avgiver = await Avgiver.hent(); if (avgiver.type === 'enhet') { return avgiver.id; } return undefined; } catch (e) { console.error('Feil under henting av avgiver', e); return undefined; } } async fetch(adresse: string, ekstraValg?) { const valg = await this._leggTilValg(ekstraValg); try { return await window.fetch(adresse, valg); } catch (e) { // single retry on network error const error = (e as unknown) as any; if ( (error.name as any) === 'NetworkError' || e instanceof TypeError ) { await timeout(250); return await window.fetch(adresse, valg); } throw e; } } } function timeout(milliseconds) { return new Promise((resolve) => setTimeout(resolve, milliseconds)); }