UNPKG

@kadam-net/n8n-nodes-kadam

Version:

Kadam node for n8n to manage campaigns, creatives, and more.

242 lines 10.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createCreative = createCreative; exports.updateCreative = updateCreative; exports.deleteCreative = deleteCreative; exports.getCreatives = getCreatives; exports.getBannerSizes = getBannerSizes; exports.uploadMedia = uploadMedia; const utils_1 = require("./utils"); const form_data_1 = __importDefault(require("form-data")); async function createCreative(i, baseUrl, headers, appId) { try { const campaignId = this.getNodeParameter('campaignId', i); const title = this.getNodeParameter('title', i); const text = this.getNodeParameter('text', i, ''); const linkUrl = this.getNodeParameter('linkUrl', i); const linkMedia = this.getNodeParameter('linkMedia', i); const linkMediaRect = this.getNodeParameter('linkMediaRect', i, ''); const pauseAfterModerate = this.getNodeParameter('pauseAfterModerate', i, false); const size = this.getNodeParameter('size', i, ''); const bidsCollection = this.getNodeParameter('bidsCollection', i, { bidsValues: [] }); const bids = {}; for (const item of bidsCollection.bidsValues || []) { bids[item.countryId] = { bid: item.bid }; } const creativeData = { campaign_id: campaignId, title, link_url: linkUrl, link_media: linkMedia, client_id: appId, }; if (text) creativeData.text = text; if (linkMediaRect) creativeData.link_media_rect = linkMediaRect; if (pauseAfterModerate) creativeData.pause_after_moderate = 1; if (size) creativeData.size = size; if (Object.keys(bids).length > 0) creativeData.bids = bids; const data = [creativeData]; this.logger.debug(`Creating creative with data: ${JSON.stringify(data)}`); const response = await utils_1.makeApiRequest.call(this, 'put', `${baseUrl}/ads.materials.put`, headers, { app_id: appId }, { data: JSON.stringify(data) }); if (response && typeof response === 'object') { if ('data' in response) { return response.data; } else if ('response' in response) { return response.response; } } return response; } catch (error) { this.logger.error(`Error in createCreative: ${error.message}`); throw error; } } async function updateCreative(i, baseUrl, headers, appId) { const data = this.getNodeParameter('data', i); if (Array.isArray(data)) { data.forEach(item => item.client_id = appId); } else if (typeof data === 'object' && data !== null) { data.client_id = appId; } return utils_1.makeApiRequest.call(this, 'post', `${baseUrl}/ads.materials.update`, headers, { app_id: appId }, { data }); } async function deleteCreative(i, baseUrl, headers, appId) { try { const ids = this.getNodeParameter('ids', i); let formattedIds = ids; if (!ids.startsWith('[') && !ids.startsWith('"')) { if (ids.includes(',')) { formattedIds = JSON.stringify(ids.split(',').map(id => id.trim())); } else { formattedIds = `"${ids}"`; } } const params = { app_id: appId, client_id: appId, account_id: appId, ids: formattedIds, }; this.logger.debug(`Deleting creatives with params: ${JSON.stringify(params)}`); const response = await utils_1.makeApiRequest.call(this, 'delete', `${baseUrl}/ads.materials.delete`, headers, params); if (response && typeof response === 'object') { if ('data' in response) { return response.data; } else if ('response' in response) { return response.response; } } return response; } catch (error) { this.logger.error(`Error in deleteCreative: ${error.message}`); throw error; } } async function getCreatives(i, baseUrl, headers, appId) { try { const archiveStatus = this.getNodeParameter('archive', i, false) ? 1 : 0; const selectedCampaignIds = this.getNodeParameter('campaignIds', i, []); const selectedCreativeIds = this.getNodeParameter('creativeIds', i, []); const adFormat = this.getNodeParameter('adFormat', i); const params = { app_id: appId, account_id: appId, client_id: appId, archive: archiveStatus, ad_format: adFormat, }; if (selectedCampaignIds && selectedCampaignIds.length > 0) { params.campaign_ids = selectedCampaignIds.join(','); this.logger.debug(`Filtering creatives by campaigns: ${params.campaign_ids}`); } if (selectedCreativeIds && selectedCreativeIds.length > 0) { params.material_ids = selectedCreativeIds.join(','); this.logger.debug(`Filtering creatives by IDs: ${params.material_ids}`); } this.logger.debug(`Getting creatives with params: ${JSON.stringify(params)}`); const returnAll = this.getNodeParameter('returnAll', i, false); if (!returnAll) { const limit = this.getNodeParameter('limit', i, 10); params.limit = limit; const offset = this.getNodeParameter('offset', i, 0); if (offset > 0) { params.offset = offset; } this.logger.debug(`Pagination: limit=${limit}, offset=${offset || 0}`); } const response = await utils_1.fetchAll.call(this, `${baseUrl}/ads.materials.get`, headers, params); let creatives = []; if (response && typeof response === 'object') { const responseObj = response; if (responseObj.response && Array.isArray(responseObj.response.items)) { creatives = responseObj.response.items; } else if (Array.isArray(responseObj)) { creatives = responseObj; } else if (responseObj.items && Array.isArray(responseObj.items)) { creatives = responseObj.items; } } const cleanCreatives = creatives.map((creative) => { if (creative.id !== undefined && typeof creative.id !== 'string') { creative.id = String(creative.id); } if (creative.status !== undefined) { creative.status_text = creative.status === 1 ? 'Active' : 'Paused'; } return creative; }); this.logger.debug(`Retrieved ${cleanCreatives.length} creatives`); return cleanCreatives; } catch (error) { this.logger.error(`Error in getCreatives: ${error.message}`); throw error; } } async function getBannerSizes(i, baseUrl, headers, appId) { try { const params = { app_id: appId, client_id: appId }; this.logger.debug(`Getting banner sizes with params: ${JSON.stringify(params)}`); const response = await utils_1.makeApiRequest.call(this, 'get', `${baseUrl}/ads.materials.banner.sizes.get`, headers, params); let bannerSizes = []; if (response && typeof response === 'object') { const responseObj = response; if (responseObj.response && typeof responseObj.response === 'object') { const responseData = responseObj.response; if (Array.isArray(responseData.items)) { bannerSizes = responseData.items; } else if (Array.isArray(responseData.sizes)) { bannerSizes = responseData.sizes; } } else if (Array.isArray(responseObj.items)) { bannerSizes = responseObj.items; } } this.logger.debug(`Retrieved ${bannerSizes.length} banner sizes`); return bannerSizes; } catch (error) { this.logger.error(`Error in getBannerSizes: ${error.message}`); throw error; } } async function uploadMedia(i, baseUrl, headers, appId) { try { const binaryPropertyName = this.getNodeParameter('file', i); if (!binaryPropertyName) { throw new Error('Binary property name is required for uploadMedia operation'); } const adFormat = this.getNodeParameter('adFormat', i); this.logger.debug(`Uploading media with format ${adFormat}`); const binaryData = await this.helpers.getBinaryDataBuffer(i, binaryPropertyName); if (!binaryData) { throw new Error(`No binary data found in property '${binaryPropertyName}'`); } const binaryProperty = this.helpers.assertBinaryData(i, binaryPropertyName); const fileName = binaryProperty.fileName || 'file'; const mimeType = binaryProperty.mimeType || 'application/octet-stream'; const formData = new form_data_1.default(); formData.append('file', new Blob([binaryData], { type: mimeType }), fileName); formData.append('app_id', appId); formData.append('ad_format', adFormat); this.logger.debug(`Uploading media file: ${fileName} (${mimeType})`); const response = await utils_1.makeApiRequest.call(this, 'post', `${baseUrl}/data.upload.media`, { ...headers, 'Content-Type': 'multipart/form-data' }, undefined, formData); if (response && typeof response === 'object') { const responseObj = response; this.logger.debug('Media upload successful'); if (responseObj.response && typeof responseObj.response === 'object') { const responseData = responseObj.response; if (responseData.id) { this.logger.info(`Uploaded media ID: ${responseData.id}`); return { id: responseData.id, ...responseData }; } return responseData; } return responseObj; } return response; } catch (error) { this.logger.error(`Error in uploadMedia: ${error.message}`); throw error; } } //# sourceMappingURL=creatives.js.map