const axios = require('axios'); const config = require('../config'); const { withRetry } = require('../utils/retry'); const logger = require('../utils/logger'); const RETRY_OPTS = { retries: 2, initialDelayMs: 300 }; async function getMDMToken() { logger.debug('Requesting Workspace ONE token'); const response = await withRetry( () => axios.post( config.mdm.tokenUrl, new URLSearchParams({ grant_type: 'client_credentials', client_id: config.mdm.clientId, client_secret: config.mdm.clientSecret, }), { headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, timeout: 15000, } ), RETRY_OPTS ); logger.info('MDM token acquired'); return response.data.access_token; } async function getMDMDevices(storeNumber) { const storePadded = String(storeNumber).padStart(6, '0'); logger.info('Fetching MDM devices', { storePadded }); try { const token = await getMDMToken(); const response = await withRetry( () => axios.get(`${config.mdm.baseUrl}/api/mdm/devices/search`, { params: { user: storePadded }, headers: { Authorization: `Bearer ${token}`, 'aw-tenant-code': config.mdm.tenantCode, Accept: 'application/json', }, timeout: 20000, }), RETRY_OPTS ); const devices = response.data.Devices || []; logger.info('Fetched MDM devices', { count: devices.length }); return devices; } catch (err) { logger.error('MDM devices fetch failed', { error: err.message }); return []; } } module.exports = { getMDMDevices };