"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const axios_1 = __importDefault(require("axios")); class FranceTravailService { constructor() { this.accessToken = null; this.tokenExpiration = null; this.realm = '/partenaire'; this.clientId = process.env.FRANCE_TRAVAIL_CLIENT_ID || ''; this.clientSecret = process.env.FRANCE_TRAVAIL_CLIENT_SECRET || ''; this.tokenUrl = process.env.FRANCE_TRAVAIL_TOKEN_URL || ''; this.apiUrl = process.env.FRANCE_TRAVAIL_API_URL || ''; this.scope = process.env.FRANCE_TRAVAIL_SCOPE || ''; } async authenticate() { try { const response = await axios_1.default.post(this.tokenUrl, null, { params: { realm: this.realm, grant_type: 'client_credentials', client_id: this.clientId, client_secret: this.clientSecret, scope: this.scope, }, headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, }); this.accessToken = response.data.access_token; this.tokenExpiration = Date.now() + response.data.expires_in * 1000; } catch (error) { const axiosError = error; console.error('Authentication failed:', axiosError.response?.data || axiosError.message); throw new Error('Failed to authenticate with France Travail API'); } } async ensureValidToken() { if (!this.accessToken || (this.tokenExpiration && Date.now() >= this.tokenExpiration)) { await this.authenticate(); } } async getJobOffers(params) { await this.ensureValidToken(); try { const response = await axios_1.default.get(this.apiUrl, { headers: { Authorization: `Bearer ${this.accessToken}`, }, params: { ...params, range: params?.range || '0-9', // Default range for pagination }, }); return response.data; } catch (error) { const axiosError = error; console.error('Failed to fetch job offers:', axiosError.response?.data || axiosError.message); throw new Error('Failed to fetch job offers from France Travail API'); } } } exports.default = new FranceTravailService();