diff --git a/src/services/idnot/index.ts b/src/services/idnot/index.ts index 66744d1..537bf28 100644 --- a/src/services/idnot/index.ts +++ b/src/services/idnot/index.ts @@ -3,51 +3,76 @@ import { IdNotUser, ECivility, EOfficeStatus, EIdnotRole } from '../../types'; export class IdNotService { static async exchangeCodeForTokens(code: string) { + const { + IDNOT_CLIENT_ID, + IDNOT_CLIENT_SECRET, + IDNOT_REDIRECT_URI, + IDNOT_TOKEN_URL + } = process.env; + + if (!IDNOT_CLIENT_ID || !IDNOT_CLIENT_SECRET || !IDNOT_REDIRECT_URI || !IDNOT_TOKEN_URL) { + throw new Error('Missing IDnot environment variables'); + } + const params = { - client_id: process.env.IDNOT_CLIENT_ID, - client_secret: process.env.IDNOT_CLIENT_SECRET, - redirect_uri: process.env.IDNOT_REDIRECT_URI, + client_id: IDNOT_CLIENT_ID, + client_secret: IDNOT_CLIENT_SECRET, + redirect_uri: IDNOT_REDIRECT_URI, grant_type: 'authorization_code', - code: code + code }; - const tokens = await ( - await fetch(process.env.IDNOT_TOKEN_URL, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: new URLSearchParams(params).toString() - }) - ).json(); + const response = await fetch(IDNOT_TOKEN_URL, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: new URLSearchParams(params).toString() + }); - return tokens; + if (!response.ok) { + throw new Error(`Token exchange failed: ${response.status} ${response.statusText}`); + } + + return response.json(); } static async getUserRattachements(idNot: string) { + const { IDNOT_API_KEY, IDNOT_ANNUARY_BASE_URL } = process.env; + + if (!IDNOT_API_KEY || !IDNOT_ANNUARY_BASE_URL) { + throw new Error('Missing IDnot API key or annuary base URL'); + } + const searchParams = new URLSearchParams({ - key: process.env.IDNOT_API_KEY || '', + key: IDNOT_API_KEY, deleted: 'false' }); - const url = `${process.env.IDNOT_ANNUARY_BASE_URL}/api/pp/v2/personnes/${idNot}/rattachements?` + searchParams; + const url = `${IDNOT_ANNUARY_BASE_URL}/api/pp/v2/personnes/${idNot}/rattachements?${searchParams}`; - const json = await ( - await fetch(url, { - method: 'GET' - }) - ).json(); + const response = await fetch(url, { method: 'GET' }); - return json; + if (!response.ok) { + throw new Error(`Failed to fetch rattachements: ${response.status} ${response.statusText}`); + } + + return response.json(); } static async getOfficeRattachements(idNot: string) { + const { IDNOT_API_KEY, IDNOT_ANNUARY_BASE_URL } = process.env; + + if (!IDNOT_API_KEY || !IDNOT_ANNUARY_BASE_URL) { + throw new Error('Missing IDnot API key or annuary base URL'); + } + const searchParams = new URLSearchParams({ - key: process.env.IDNOT_API_KEY || '', + key: IDNOT_API_KEY, deleted: 'false' }); - const url = `${process.env.IDNOT_ANNUARY_BASE_URL}/api/pp/v2/entites/${idNot}/personnes?` + searchParams; + const url = `${IDNOT_ANNUARY_BASE_URL}/api/pp/v2/entites/${idNot}/personnes?` + searchParams; const json = await ( await fetch(url, { @@ -59,12 +84,18 @@ export class IdNotService { } static async getUserData(profileIdn: string) { + const { IDNOT_API_KEY, IDNOT_API_BASE_URL } = process.env; + + if (!IDNOT_API_KEY || !IDNOT_API_BASE_URL) { + throw new Error('Missing IDnot API key or base URL'); + } + const searchParams = new URLSearchParams({ - key: process.env.IDNOT_API_KEY || '' + key: IDNOT_API_KEY }); const userData = await ( - await fetch(`${process.env.API_BASE_URL}/api/pp/v2/rattachements/${profileIdn}?` + searchParams, { + await fetch(`${IDNOT_API_BASE_URL}/api/pp/v2/rattachements/${profileIdn}?` + searchParams, { method: 'GET' }) ).json(); @@ -73,12 +104,18 @@ export class IdNotService { } static async getOfficeLocationData(locationsUrl: string) { + const { IDNOT_API_KEY, IDNOT_API_BASE_URL } = process.env; + + if (!IDNOT_API_KEY || !IDNOT_API_BASE_URL) { + throw new Error('Missing IDnot API key or base URL'); + } + const searchParams = new URLSearchParams({ - key: process.env.IDNOT_API_KEY || '' + key: IDNOT_API_KEY }); const officeLocationData = await ( - await fetch(`${process.env.API_BASE_URL}${locationsUrl}?` + searchParams, { + await fetch(`${IDNOT_API_BASE_URL}${locationsUrl}?` + searchParams, { method: 'GET' }) ).json();