import fetch from 'node-fetch'; 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: IDNOT_CLIENT_ID, client_secret: IDNOT_CLIENT_SECRET, redirect_uri: IDNOT_REDIRECT_URI, grant_type: 'authorization_code', code }; const response = await fetch(IDNOT_TOKEN_URL, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams(params).toString() }); 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: IDNOT_API_KEY, deleted: 'false' }); const url = `${IDNOT_ANNUARY_BASE_URL}/api/pp/v2/personnes/${idNot}/rattachements?${searchParams}`; const response = await fetch(url, { method: 'GET' }); 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: IDNOT_API_KEY, deleted: 'false' }); const url = `${IDNOT_ANNUARY_BASE_URL}/api/pp/v2/entites/${idNot}/personnes?` + searchParams; const json = await ( await fetch(url, { method: 'GET' }) ).json(); return json; } 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: IDNOT_API_KEY }); const userData = await ( await fetch(`${IDNOT_API_BASE_URL}/api/pp/v2/rattachements/${profileIdn}?` + searchParams, { method: 'GET' }) ).json(); return userData; } 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: IDNOT_API_KEY }); const officeLocationData = await ( await fetch(`${IDNOT_API_BASE_URL}${locationsUrl}?` + searchParams, { method: 'GET' }) ).json(); return officeLocationData; } static getOfficeStatus(statusName: string): EOfficeStatus { switch (statusName) { case "Pourvu": return EOfficeStatus.ACTIVATED; case "Pourvu mais décédé": return EOfficeStatus.ACTIVATED; case "Sans titulaire": return EOfficeStatus.ACTIVATED; case "Vacance": return EOfficeStatus.ACTIVATED; case "En activité": return EOfficeStatus.ACTIVATED; default: return EOfficeStatus.DESACTIVATED; } } static getOfficeRole(roleName: string): { name: string } | null { switch (roleName) { case EIdnotRole.NOTAIRE_TITULAIRE: return { name: 'Notaire' }; case EIdnotRole.NOTAIRE_ASSOCIE: return { name: 'Notaire' }; case EIdnotRole.NOTAIRE_SALARIE: return { name: 'Notaire' }; case EIdnotRole.COLLABORATEUR: return { name: 'Collaborateur' }; case EIdnotRole.SUPPLEANT: return { name: 'Collaborateur' }; case EIdnotRole.ADMINISTRATEUR: return { name: 'Collaborateur' }; case EIdnotRole.CURATEUR: return { name: 'Collaborateur' }; default: return null; } } static getRole(roleName: string): { name: string } { switch (roleName) { case EIdnotRole.NOTAIRE_TITULAIRE: return { name: 'admin' }; case EIdnotRole.NOTAIRE_ASSOCIE: return { name: 'admin' }; case EIdnotRole.NOTAIRE_SALARIE: return { name: 'notary' }; case EIdnotRole.COLLABORATEUR: return { name: 'notary' }; case EIdnotRole.SUPPLEANT: return { name: 'notary' }; case EIdnotRole.ADMINISTRATEUR: return { name: 'admin' }; case EIdnotRole.CURATEUR: return { name: 'notary' }; default: return { name: 'default' }; } } static getCivility(civility: string): ECivility { switch (civility) { case 'Monsieur': return ECivility.MALE; case 'Madame': return ECivility.FEMALE; default: return ECivility.OTHERS; } } }