Sadrinho27 e6fd9192b1
All checks were successful
Build and Push to Registry / build-and-push (push) Successful in 47s
Ensure environment variables are validated as strings for fetch calls
2025-09-16 10:54:23 +02:00

196 lines
5.3 KiB
TypeScript

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;
}
}
}