@basetime/bldr-sfmc-sdk
Advanced tools
Comparing version 1.1.1 to 1.1.2
@@ -54,2 +54,4 @@ "use strict"; | ||
const formattedResponse = (response && | ||
response.Results && | ||
response.Results.length && | ||
response.Results.map((folder) => { | ||
@@ -177,10 +179,14 @@ return { | ||
}); | ||
const buildFolderPaths = yield (0, BuildSoapFolderObjects_1.buildFolderPathsSoap)(folderResponse.full); | ||
const isolateFolderIds = folderResponse && | ||
folderResponse.down && | ||
folderResponse.down.length && | ||
folderResponse.down | ||
folderResponse.full && | ||
folderResponse.full.length && | ||
folderResponse.full | ||
.map((folder) => folder.Name !== rootFolderName && folder.ID) | ||
.filter(Boolean); | ||
const assetResponse = yield this.sfmc.asset.getAssetsByFolderArray(isolateFolderIds); | ||
const assetsAndFoldersRequest = yield Promise.all([ | ||
(0, BuildSoapFolderObjects_1.buildFolderPathsSoap)(folderResponse.full), | ||
this.sfmc.asset.getAssetsByFolderArray(isolateFolderIds), | ||
]); | ||
const buildFolderPaths = (assetsAndFoldersRequest && assetsAndFoldersRequest[0]) || []; | ||
const assetResponse = (assetsAndFoldersRequest && assetsAndFoldersRequest[1]) || []; | ||
if (assetResponse && | ||
@@ -192,11 +198,4 @@ assetResponse.response && | ||
} | ||
const formattedAssetResponse = (assetResponse && | ||
assetResponse.items && | ||
assetResponse.items.length && | ||
buildFolderPaths && | ||
buildFolderPaths.folders && | ||
(yield (0, FormatContentBuilderAsset_1.formatContentBuilderAssets)(assetResponse.items, buildFolderPaths.folders))) || | ||
[]; | ||
const formattedFolders = (buildFolderPaths.folders && | ||
buildFolderPaths.folders.length && | ||
const formatResponses = yield Promise.all([ | ||
(0, FormatContentBuilderAsset_1.formatContentBuilderAssets)(assetResponse.items, buildFolderPaths.folders), | ||
buildFolderPaths.folders.map((folder) => { | ||
@@ -209,4 +208,29 @@ return { | ||
}; | ||
})) || | ||
[]; | ||
}), | ||
]); | ||
const formattedAssetResponse = (formatResponses && formatResponses[0]) || []; | ||
const formattedFolders = (formatResponses && formatResponses[1]) || []; | ||
// const formattedAssetResponse = | ||
// (assetResponse && | ||
// assetResponse.items && | ||
// assetResponse.items.length && | ||
// buildFolderPaths && | ||
// buildFolderPaths.folders && | ||
// (await formatContentBuilderAssets( | ||
// assetResponse.items, | ||
// buildFolderPaths.folders | ||
// ))) || | ||
// []; | ||
// const formattedFolders = | ||
// (buildFolderPaths.folders && | ||
// buildFolderPaths.folders.length && | ||
// buildFolderPaths.folders.map((folder) => { | ||
// return { | ||
// id: folder.ID, | ||
// name: folder.Name, | ||
// parentId: folder.ParentFolder.ID, | ||
// folderPath: folder.FolderPath, | ||
// }; | ||
// })) || | ||
// []; | ||
return { | ||
@@ -213,0 +237,0 @@ folders: formattedFolders || [], |
@@ -149,4 +149,2 @@ "use strict"; | ||
const folderResponse = yield this.sfmc.folder.getFoldersFromMiddle(request); | ||
const buildFolderPaths = folderResponse && | ||
(yield (0, BuildSoapFolderObjects_1.buildFolderPathsSoap)(folderResponse.full)); | ||
const isolateFolderIds = (folderResponse && | ||
@@ -159,14 +157,22 @@ folderResponse.down && | ||
[]; | ||
const assetResponse = isolateFolderIds && | ||
isolateFolderIds.length && | ||
(yield this.sfmc.emailStudio.getAssetsByFolderArray(isolateFolderIds)); | ||
const formattedAssetResponse = []; | ||
const dataExtensions = (assetResponse && assetResponse.Results) || []; | ||
if (dataExtensions && dataExtensions.length) { | ||
for (const a in dataExtensions) { | ||
const dataExtension = dataExtensions[a]; | ||
const dataExtensionPayload = dataExtension && | ||
(yield this.sfmc.emailStudio.retrieveDataExtensionPayloadByName(dataExtension.Name, complete, shared)); | ||
formattedAssetResponse.push(dataExtensionPayload); | ||
} | ||
const assetsAndFoldersRequest = yield Promise.all([ | ||
(0, BuildSoapFolderObjects_1.buildFolderPathsSoap)(folderResponse.full), | ||
this.sfmc.emailStudio.getAssetsByFolderArray(isolateFolderIds), | ||
]); | ||
const buildFolderPaths = (assetsAndFoldersRequest && assetsAndFoldersRequest[0]) || []; | ||
const assetResponse = (assetsAndFoldersRequest && assetsAndFoldersRequest[1]) || []; | ||
let dataExtensionsResults = assetResponse && | ||
assetResponse.Results && | ||
assetResponse.Results.length | ||
? assetResponse.Results | ||
: []; | ||
let formattedAssets; | ||
if (dataExtensionsResults && dataExtensionsResults.length) { | ||
dataExtensionsResults = dataExtensionsResults.filter(Boolean); | ||
formattedAssets = | ||
(yield Promise.all(dataExtensionsResults.map((dataExtension) => { | ||
if (!dataExtension.Name) | ||
return; | ||
return this.sfmc.emailStudio.retrieveDataExtensionPayloadByName(dataExtension.Name, complete, shared); | ||
}))) || []; | ||
} | ||
@@ -186,3 +192,3 @@ const formattedFolders = (buildFolderPaths.folders && | ||
folders: formattedFolders || [], | ||
assets: formattedAssetResponse || [], | ||
assets: formattedAssets || [], | ||
}; | ||
@@ -189,0 +195,0 @@ } |
@@ -8,2 +8,3 @@ import { CLI_Client } from './types/cli_client'; | ||
export declare class CLI implements CLI_Client { | ||
_helpers: any; | ||
contentBuilder: any; | ||
@@ -10,0 +11,0 @@ automationStudio: any; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.CLI = void 0; | ||
const automationStudio_1 = require("./automationStudio"); | ||
const contentBuilder_1 = require("./contentBuilder"); | ||
const automationStudio_1 = require("./automationStudio"); | ||
const emailStudio_1 = require("./emailStudio"); | ||
const helpers_1 = require("./helpers"); | ||
/** | ||
@@ -14,2 +15,3 @@ * Creates an instance of BLDR SDK. | ||
constructor(sfmc) { | ||
this._helpers = new helpers_1.Helpers(); | ||
this.contentBuilder = new contentBuilder_1.ContentBuilder(sfmc); | ||
@@ -16,0 +18,0 @@ this.automationStudio = new automationStudio_1.AutomationStudio(sfmc, this.contentBuilder); |
export interface CLI_Client { | ||
_helpers: { | ||
formatPromiseAllResponse: Function; | ||
}; | ||
contentBuilder: { | ||
@@ -3,0 +6,0 @@ searchFolders: Function; |
@@ -22,3 +22,3 @@ import { SFMC_Content_Builder_Asset } from '../../../../sfmc/types/objects/sfmc_content_builder_assets'; | ||
*/ | ||
declare const formatContentBuilderAssets: (results: SFMC_Content_Builder_Asset, folders: BLDR_Folder[]) => Promise<BLDR_SFMC_Content_Builder_Asset[]>; | ||
declare const formatContentBuilderAssets: (results: SFMC_Content_Builder_Asset, folders: BLDR_Folder[]) => Promise<BLDR_SFMC_Content_Builder_Asset | BLDR_SFMC_Content_Builder_Asset[]>; | ||
export { formatContentBuilderAssets }; |
@@ -22,3 +22,2 @@ "use strict"; | ||
const setAssetPostObject = (asset, folders) => { | ||
console.log({ asset }); | ||
// Generate new bldrId for asset | ||
@@ -85,16 +84,10 @@ const bldrId = (0, index_1.guid)(); | ||
const formatContentBuilderAssets = (results, folders) => __awaiter(void 0, void 0, void 0, function* () { | ||
const formattedAssets = []; | ||
if (Array.isArray(results) && results.length !== 0) { | ||
for (const r in results) { | ||
const asset = results[r]; | ||
const post = setAssetPostObject(asset, folders); | ||
formattedAssets.push(post); | ||
} | ||
const formatAllResults = yield Promise.all(results.map((result) => setAssetPostObject(result, folders))); | ||
return formatAllResults; | ||
} | ||
else { | ||
const post = setAssetPostObject(results, folders); | ||
formattedAssets.push(post); | ||
return setAssetPostObject(results, folders); | ||
} | ||
return formattedAssets; | ||
}); | ||
exports.formatContentBuilderAssets = formatContentBuilderAssets; |
@@ -13,3 +13,5 @@ "use strict"; | ||
exports.ContentBuilderAsset = void 0; | ||
const chunkArray_1 = require("../utils/chunkArray"); | ||
const handleError_1 = require("../utils/handleError"); | ||
const sumByKeys_1 = require("../utils/sumByKeys"); | ||
class ContentBuilderAsset { | ||
@@ -80,22 +82,29 @@ constructor(client) { | ||
} | ||
return this.client.rest.post('/asset/v1/content/assets/query', { | ||
page: { | ||
page: 1, | ||
pageSize: 200, | ||
}, | ||
query: { | ||
property: 'category.id', | ||
simpleOperator: 'in', | ||
value: folderIdArray, | ||
}, | ||
sort: [ | ||
{ | ||
property: 'id', | ||
direction: 'ASC', | ||
const chunkedArrays = yield (0, chunkArray_1.chunk)(folderIdArray, 6); | ||
const assetRequests = yield Promise.all(chunkedArrays.map((assetArray) => __awaiter(this, void 0, void 0, function* () { | ||
return this.client.rest.post('/asset/v1/content/assets/query', { | ||
page: { | ||
page: 1, | ||
pageSize: 200, | ||
}, | ||
], | ||
}); | ||
query: { | ||
property: 'category.id', | ||
simpleOperator: 'in', | ||
value: assetArray, | ||
}, | ||
sort: [ | ||
{ | ||
property: 'id', | ||
direction: 'ASC', | ||
}, | ||
], | ||
}); | ||
}))); | ||
return { | ||
count: (0, sumByKeys_1.sumByKey)(assetRequests, 'count'), | ||
items: (0, sumByKeys_1.concatByKey)(assetRequests, 'items'), | ||
}; | ||
} | ||
catch (err) { | ||
return (0, handleError_1.handleError)(err); | ||
return err; | ||
} | ||
@@ -102,0 +111,0 @@ }); |
@@ -15,2 +15,3 @@ "use strict"; | ||
const BuildSoapFolderObjects_1 = require("../../cli/utils/BuildSoapFolderObjects"); | ||
const chunkArray_1 = require("../utils/chunkArray"); | ||
const handleError_1 = require("../utils/handleError"); | ||
@@ -125,26 +126,33 @@ const modifyObject_1 = require("../utils/modifyObject"); | ||
this.getAssetsByFolderArray = (folderIdArray) => __awaiter(this, void 0, void 0, function* () { | ||
let requestFilter = {}; | ||
if (folderIdArray.length === 1) { | ||
requestFilter = { | ||
filter: { | ||
leftOperand: 'CategoryID', | ||
operator: 'equals', | ||
rightOperand: folderIdArray[0], | ||
}, | ||
try { | ||
const chunkedArrays = yield (0, chunkArray_1.chunk)(folderIdArray, 6); | ||
const dataExtensionRequest = yield Promise.all(chunkedArrays.map((assetArray) => { | ||
return this.client.soap.retrieve('DataExtension', dataExtensionDefinition, { | ||
filter: { | ||
leftOperand: 'CategoryID', | ||
operator: assetArray && assetArray.length > 1 | ||
? 'IN' | ||
: 'equals', | ||
rightOperand: assetArray && assetArray.length > 1 | ||
? assetArray | ||
: assetArray[0], | ||
}, | ||
}); | ||
})); | ||
const overallStatusArray = dataExtensionRequest && | ||
dataExtensionRequest.map((request) => request.OverallStatus); | ||
const resultsArray = dataExtensionRequest && | ||
dataExtensionRequest.map((request) => request.Results).flat(); | ||
const output = { | ||
OverallStatus: overallStatusArray && | ||
overallStatusArray.every((status) => status === 'OK') | ||
? 'OK' | ||
: overallStatusArray, | ||
Results: resultsArray, | ||
}; | ||
return output; | ||
} | ||
else { | ||
requestFilter = { | ||
filter: { | ||
leftOperand: 'CategoryID', | ||
operator: 'IN', | ||
rightOperand: folderIdArray, | ||
}, | ||
}; | ||
catch (err) { | ||
return err; | ||
} | ||
const dataExtensionResponse = yield this.client.soap.retrieve('DataExtension', dataExtensionDefinition, requestFilter); | ||
if (dataExtensionResponse.OverallStatus !== 'OK') { | ||
throw new Error(dataExtensionResponse.OverallStatus); | ||
} | ||
return dataExtensionResponse; | ||
}); | ||
@@ -151,0 +159,0 @@ /** |
@@ -76,3 +76,3 @@ import { SFMC_SOAP_Folder } from '../types/objects/sfmc_soap_folders'; | ||
categoryId: number; | ||
}): Promise<any>; | ||
}): Promise<unknown>; | ||
/** | ||
@@ -79,0 +79,0 @@ * Retrieve all folders top and bottom from a specific categoryId |
@@ -151,4 +151,6 @@ "use strict"; | ||
} | ||
const responseResults = response.Results; | ||
results.push(...responseResults); | ||
const responseResults = response.Results || []; | ||
responseResults && | ||
responseResults.length && | ||
results.push(...responseResults); | ||
return results; | ||
@@ -255,39 +257,60 @@ } | ||
try { | ||
let folders = []; | ||
let folders = [request.categoryId]; | ||
let results = []; | ||
// Get target folder from SFMC | ||
let rootRequest = yield this.getFolder(request); | ||
// Ensure response has results | ||
if (!Object.prototype.hasOwnProperty.call(rootRequest, 'Results')) { | ||
throw new Error(`Unable to find folder`); | ||
} | ||
if (rootRequest && | ||
rootRequest.Results && | ||
rootRequest.Results.length) { | ||
const rootIdArray = rootRequest.Results.map((folder) => folder.ID); | ||
folders.push(...rootIdArray); | ||
results = [...results, ...rootRequest.Results]; | ||
} | ||
// Recursively get folders from SFMC | ||
do { | ||
let categoryId = folders[0]; | ||
// SFMC Folder response checking for subfolders | ||
let subfolderRequest = yield this.getSubfolders({ | ||
contentType: request.contentType, | ||
parentId: categoryId, | ||
const subfoldersArrayRequest = yield Promise.all(folders.map((categoryId) => __awaiter(this, void 0, void 0, function* () { | ||
// SFMC Folder response checking for subfolders | ||
let subfolderRequest = yield this.getSubfolders({ | ||
contentType: request.contentType, | ||
parentId: categoryId, | ||
}); | ||
if (subfolderRequest && | ||
Array.isArray(subfolderRequest) && | ||
subfolderRequest.length) { | ||
let subfolderIdArray = subfolderRequest.map((folder) => folder.ID); | ||
return { | ||
categoryId: categoryId, | ||
subfolderIdArray: subfolderIdArray, | ||
subfolderRequest: subfolderRequest, | ||
}; | ||
} | ||
else { | ||
return { | ||
categoryId: categoryId || null, | ||
subfolderIdArray: subfolderRequest || [], | ||
subfolderRequest: subfolderRequest || [], | ||
}; | ||
} | ||
}))).then((response) => { | ||
const foldersMap = response | ||
.map((res) => [...res.subfolderIdArray]) | ||
.flat(); | ||
const resultsMap = response | ||
.map((res) => [...res.subfolderRequest]) | ||
.flat(); | ||
return { | ||
folderIds: foldersMap || [], | ||
results: resultsMap || [], | ||
}; | ||
}); | ||
if (subfolderRequest && | ||
Array.isArray(subfolderRequest) && | ||
subfolderRequest.length > 0) { | ||
let subfolderIdArray = subfolderRequest.map((folder) => folder.ID); | ||
folders.push(...subfolderIdArray); | ||
results = [...results, ...subfolderRequest]; | ||
if (subfoldersArrayRequest && | ||
subfoldersArrayRequest.folderIds && | ||
subfoldersArrayRequest.folderIds.length) { | ||
folders = []; | ||
folders = subfoldersArrayRequest.folderIds; | ||
results = subfoldersArrayRequest.results && | ||
subfoldersArrayRequest.results.length && [ | ||
...results, | ||
...subfoldersArrayRequest.results, | ||
]; | ||
} | ||
folders.shift(); | ||
else { | ||
folders = []; | ||
} | ||
} while (folders.length !== 0); | ||
return results || []; | ||
return results.sort((a, b) => b.ID - a.ID); | ||
} | ||
catch (err) { | ||
console.log(err); | ||
return (0, handleError_1.handleError)(err); | ||
return err; | ||
} | ||
@@ -311,3 +334,3 @@ }); | ||
full: [ | ||
...new Map([...up.results, ...down].map((item) => [item['Name'], item])).values(), | ||
...new Map([...up.results, ...down].map((item) => [item['ID'], item])).values(), | ||
], | ||
@@ -314,0 +337,0 @@ }; |
@@ -58,2 +58,4 @@ import { SFMC_SOAP_Folder } from '../../sfmc/types/objects/sfmc_soap_folders'; | ||
(response && | ||
response.Results && | ||
response.Results.length && | ||
response.Results.map( | ||
@@ -241,2 +243,3 @@ (folder: { | ||
: 'Content Builder'; | ||
const folderResponse = await this.sfmc.folder.getFoldersFromMiddle({ | ||
@@ -247,10 +250,7 @@ contentType: shared ? 'asset-shared' : 'asset', | ||
const buildFolderPaths = await buildFolderPathsSoap( | ||
folderResponse.full | ||
); | ||
const isolateFolderIds = | ||
folderResponse && | ||
folderResponse.down && | ||
folderResponse.down.length && | ||
folderResponse.down | ||
folderResponse.full && | ||
folderResponse.full.length && | ||
folderResponse.full | ||
.map( | ||
@@ -262,6 +262,12 @@ (folder: SFMC_SOAP_Folder) => | ||
const assetResponse = await this.sfmc.asset.getAssetsByFolderArray( | ||
isolateFolderIds | ||
); | ||
const assetsAndFoldersRequest = await Promise.all([ | ||
buildFolderPathsSoap(folderResponse.full), | ||
this.sfmc.asset.getAssetsByFolderArray(isolateFolderIds), | ||
]); | ||
const buildFolderPaths = | ||
(assetsAndFoldersRequest && assetsAndFoldersRequest[0]) || []; | ||
const assetResponse = | ||
(assetsAndFoldersRequest && assetsAndFoldersRequest[1]) || []; | ||
if ( | ||
@@ -276,27 +282,47 @@ assetResponse && | ||
const formatResponses = await Promise.all([ | ||
formatContentBuilderAssets( | ||
assetResponse.items, | ||
buildFolderPaths.folders | ||
), | ||
buildFolderPaths.folders.map((folder) => { | ||
return { | ||
id: folder.ID, | ||
name: folder.Name, | ||
parentId: folder.ParentFolder.ID, | ||
folderPath: folder.FolderPath, | ||
}; | ||
}), | ||
]); | ||
const formattedAssetResponse = | ||
(assetResponse && | ||
assetResponse.items && | ||
assetResponse.items.length && | ||
buildFolderPaths && | ||
buildFolderPaths.folders && | ||
(await formatContentBuilderAssets( | ||
assetResponse.items, | ||
buildFolderPaths.folders | ||
))) || | ||
[]; | ||
(formatResponses && formatResponses[0]) || []; | ||
const formattedFolders = | ||
(buildFolderPaths.folders && | ||
buildFolderPaths.folders.length && | ||
buildFolderPaths.folders.map((folder) => { | ||
return { | ||
id: folder.ID, | ||
name: folder.Name, | ||
parentId: folder.ParentFolder.ID, | ||
folderPath: folder.FolderPath, | ||
}; | ||
})) || | ||
[]; | ||
(formatResponses && formatResponses[1]) || []; | ||
// const formattedAssetResponse = | ||
// (assetResponse && | ||
// assetResponse.items && | ||
// assetResponse.items.length && | ||
// buildFolderPaths && | ||
// buildFolderPaths.folders && | ||
// (await formatContentBuilderAssets( | ||
// assetResponse.items, | ||
// buildFolderPaths.folders | ||
// ))) || | ||
// []; | ||
// const formattedFolders = | ||
// (buildFolderPaths.folders && | ||
// buildFolderPaths.folders.length && | ||
// buildFolderPaths.folders.map((folder) => { | ||
// return { | ||
// id: folder.ID, | ||
// name: folder.Name, | ||
// parentId: folder.ParentFolder.ID, | ||
// folderPath: folder.FolderPath, | ||
// }; | ||
// })) || | ||
// []; | ||
return { | ||
@@ -303,0 +329,0 @@ folders: formattedFolders || [], |
@@ -185,2 +185,3 @@ import { SFMC_SOAP_Folder } from '../../sfmc/types/objects/sfmc_soap_folders'; | ||
: 'Data Extensions'; | ||
const folderResponse = await this.sfmc.folder.getFoldersFromMiddle( | ||
@@ -190,6 +191,2 @@ request | ||
const buildFolderPaths = | ||
folderResponse && | ||
(await buildFolderPathsSoap(folderResponse.full)); | ||
const isolateFolderIds = | ||
@@ -207,25 +204,36 @@ (folderResponse && | ||
const assetsAndFoldersRequest = await Promise.all([ | ||
buildFolderPathsSoap(folderResponse.full), | ||
this.sfmc.emailStudio.getAssetsByFolderArray(isolateFolderIds), | ||
]); | ||
const buildFolderPaths = | ||
(assetsAndFoldersRequest && assetsAndFoldersRequest[0]) || []; | ||
const assetResponse = | ||
isolateFolderIds && | ||
isolateFolderIds.length && | ||
(await this.sfmc.emailStudio.getAssetsByFolderArray( | ||
isolateFolderIds | ||
)); | ||
(assetsAndFoldersRequest && assetsAndFoldersRequest[1]) || []; | ||
const formattedAssetResponse: any[] = []; | ||
const dataExtensions = | ||
(assetResponse && assetResponse.Results) || []; | ||
let dataExtensionsResults = | ||
assetResponse && | ||
assetResponse.Results && | ||
assetResponse.Results.length | ||
? assetResponse.Results | ||
: []; | ||
if (dataExtensions && dataExtensions.length) { | ||
for (const a in dataExtensions) { | ||
const dataExtension: { Name: string } = dataExtensions[a]; | ||
const dataExtensionPayload = | ||
dataExtension && | ||
(await this.sfmc.emailStudio.retrieveDataExtensionPayloadByName( | ||
dataExtension.Name, | ||
complete, | ||
shared | ||
)); | ||
formattedAssetResponse.push(dataExtensionPayload); | ||
} | ||
let formattedAssets; | ||
if (dataExtensionsResults && dataExtensionsResults.length) { | ||
dataExtensionsResults = dataExtensionsResults.filter(Boolean); | ||
formattedAssets = | ||
(await Promise.all( | ||
dataExtensionsResults.map( | ||
(dataExtension: { Name: String }) => { | ||
if (!dataExtension.Name) return; | ||
return this.sfmc.emailStudio.retrieveDataExtensionPayloadByName( | ||
dataExtension.Name, | ||
complete, | ||
shared | ||
); | ||
} | ||
) | ||
)) || []; | ||
} | ||
@@ -248,3 +256,3 @@ | ||
folders: formattedFolders || [], | ||
assets: formattedAssetResponse || [], | ||
assets: formattedAssets || [], | ||
}; | ||
@@ -251,0 +259,0 @@ } catch (err: any) { |
@@ -0,6 +1,7 @@ | ||
import { AutomationStudio } from './automationStudio'; | ||
import { ContentBuilder } from './contentBuilder'; | ||
import { AutomationStudio } from './automationStudio'; | ||
import { BLDR_Client } from './types/bldr_client'; | ||
import { EmailStudio } from './emailStudio'; | ||
import { Helpers } from './helpers'; | ||
import { CLI_Client } from './types/cli_client'; | ||
import { EmailStudio } from './emailStudio'; | ||
/** | ||
@@ -12,2 +13,3 @@ * Creates an instance of BLDR SDK. | ||
export class CLI implements CLI_Client { | ||
_helpers: any; | ||
contentBuilder: any; | ||
@@ -18,2 +20,3 @@ automationStudio: any; | ||
constructor(sfmc: any) { | ||
this._helpers = new Helpers(); | ||
this.contentBuilder = new ContentBuilder(sfmc); | ||
@@ -20,0 +23,0 @@ this.automationStudio = new AutomationStudio(sfmc, this.contentBuilder); |
export interface CLI_Client { | ||
_helpers: { | ||
formatPromiseAllResponse: Function; | ||
}; | ||
contentBuilder: { | ||
@@ -3,0 +6,0 @@ searchFolders: Function; |
@@ -28,3 +28,2 @@ import { SFMC_Content_Builder_Asset } from '../../../../sfmc/types/objects/sfmc_content_builder_assets'; | ||
) => { | ||
console.log({ asset }); | ||
// Generate new bldrId for asset | ||
@@ -105,17 +104,12 @@ const bldrId = guid(); | ||
) => { | ||
const formattedAssets = []; | ||
if (Array.isArray(results) && results.length !== 0) { | ||
for (const r in results) { | ||
const asset = results[r]; | ||
const post = setAssetPostObject(asset, folders); | ||
formattedAssets.push(post); | ||
} | ||
const formatAllResults = await Promise.all( | ||
results.map((result) => setAssetPostObject(result, folders)) | ||
); | ||
return formatAllResults; | ||
} else { | ||
const post = setAssetPostObject(results, folders); | ||
formattedAssets.push(post); | ||
return setAssetPostObject(results, folders); | ||
} | ||
return formattedAssets; | ||
}; | ||
export { formatContentBuilderAssets }; |
import { Client } from '../types/sfmc_client'; | ||
import { chunk } from '../utils/chunkArray'; | ||
import { handleError } from '../utils/handleError'; | ||
import { concatByKey, sumByKey } from '../utils/sumByKeys'; | ||
@@ -65,22 +67,34 @@ export class ContentBuilderAsset { | ||
} | ||
const chunkedArrays = await chunk(folderIdArray, 6); | ||
const assetRequests = await Promise.all( | ||
chunkedArrays.map(async (assetArray) => { | ||
return this.client.rest.post( | ||
'/asset/v1/content/assets/query', | ||
{ | ||
page: { | ||
page: 1, | ||
pageSize: 200, | ||
}, | ||
query: { | ||
property: 'category.id', | ||
simpleOperator: 'in', | ||
value: assetArray, | ||
}, | ||
sort: [ | ||
{ | ||
property: 'id', | ||
direction: 'ASC', | ||
}, | ||
], | ||
} | ||
); | ||
}) | ||
); | ||
return this.client.rest.post('/asset/v1/content/assets/query', { | ||
page: { | ||
page: 1, | ||
pageSize: 200, | ||
}, | ||
query: { | ||
property: 'category.id', | ||
simpleOperator: 'in', | ||
value: folderIdArray, | ||
}, | ||
sort: [ | ||
{ | ||
property: 'id', | ||
direction: 'ASC', | ||
}, | ||
], | ||
}); | ||
return { | ||
count: sumByKey(assetRequests, 'count'), | ||
items: concatByKey(assetRequests, 'items'), | ||
}; | ||
} catch (err: any) { | ||
return handleError(err); | ||
return err; | ||
} | ||
@@ -87,0 +101,0 @@ } |
@@ -5,2 +5,3 @@ import { guid } from '../../cli/utils'; | ||
import { Client } from '../types/sfmc_client'; | ||
import { chunk } from '../utils/chunkArray'; | ||
import { handleError } from '../utils/handleError'; | ||
@@ -189,33 +190,48 @@ import { capitalizeKeys, lowercaseKeys } from '../utils/modifyObject'; | ||
getAssetsByFolderArray = async (folderIdArray: number[]) => { | ||
let requestFilter = {}; | ||
try { | ||
const chunkedArrays = await chunk(folderIdArray, 6); | ||
if (folderIdArray.length === 1) { | ||
requestFilter = { | ||
filter: { | ||
leftOperand: 'CategoryID', | ||
operator: 'equals', | ||
rightOperand: folderIdArray[0], | ||
}, | ||
const dataExtensionRequest = await Promise.all( | ||
chunkedArrays.map((assetArray) => { | ||
return this.client.soap.retrieve( | ||
'DataExtension', | ||
dataExtensionDefinition, | ||
{ | ||
filter: { | ||
leftOperand: 'CategoryID', | ||
operator: | ||
assetArray && assetArray.length > 1 | ||
? 'IN' | ||
: 'equals', | ||
rightOperand: | ||
assetArray && assetArray.length > 1 | ||
? assetArray | ||
: assetArray[0], | ||
}, | ||
} | ||
); | ||
}) | ||
); | ||
const overallStatusArray = | ||
dataExtensionRequest && | ||
dataExtensionRequest.map((request) => request.OverallStatus); | ||
const resultsArray = | ||
dataExtensionRequest && | ||
dataExtensionRequest.map((request) => request.Results).flat(); | ||
const output = { | ||
OverallStatus: | ||
overallStatusArray && | ||
overallStatusArray.every((status) => status === 'OK') | ||
? 'OK' | ||
: overallStatusArray, | ||
Results: resultsArray, | ||
}; | ||
} else { | ||
requestFilter = { | ||
filter: { | ||
leftOperand: 'CategoryID', | ||
operator: 'IN', | ||
rightOperand: folderIdArray, | ||
}, | ||
}; | ||
} | ||
const dataExtensionResponse = await this.client.soap.retrieve( | ||
'DataExtension', | ||
dataExtensionDefinition, | ||
requestFilter | ||
); | ||
if (dataExtensionResponse.OverallStatus !== 'OK') { | ||
throw new Error(dataExtensionResponse.OverallStatus); | ||
return output; | ||
} catch (err: any) { | ||
return err; | ||
} | ||
return dataExtensionResponse; | ||
}; | ||
@@ -222,0 +238,0 @@ |
@@ -177,4 +177,6 @@ import { SFMC_SOAP_Folder } from '../types/objects/sfmc_soap_folders'; | ||
const responseResults = response.Results; | ||
results.push(...responseResults); | ||
const responseResults = response.Results || []; | ||
responseResults && | ||
responseResults.length && | ||
results.push(...responseResults); | ||
return results; | ||
@@ -316,53 +318,72 @@ } catch (err: any) { | ||
try { | ||
let folders: number[] = []; | ||
let folders: number[] = [request.categoryId]; | ||
let results: any[] = []; | ||
// Get target folder from SFMC | ||
let rootRequest = await this.getFolder(request); | ||
// Recursively get folders from SFMC | ||
do { | ||
const subfoldersArrayRequest = await Promise.all( | ||
folders.map(async (categoryId: number) => { | ||
// SFMC Folder response checking for subfolders | ||
let subfolderRequest = await this.getSubfolders({ | ||
contentType: request.contentType, | ||
parentId: categoryId, | ||
}); | ||
// Ensure response has results | ||
if (!Object.prototype.hasOwnProperty.call(rootRequest, 'Results')) { | ||
throw new Error(`Unable to find folder`); | ||
} | ||
if ( | ||
subfolderRequest && | ||
Array.isArray(subfolderRequest) && | ||
subfolderRequest.length | ||
) { | ||
let subfolderIdArray = subfolderRequest.map( | ||
(folder: { ID: number }) => folder.ID | ||
); | ||
if ( | ||
rootRequest && | ||
rootRequest.Results && | ||
rootRequest.Results.length | ||
) { | ||
const rootIdArray = rootRequest.Results.map( | ||
(folder) => folder.ID | ||
); | ||
folders.push(...rootIdArray); | ||
results = [...results, ...rootRequest.Results]; | ||
} | ||
return { | ||
categoryId: categoryId, | ||
subfolderIdArray: subfolderIdArray, | ||
subfolderRequest: subfolderRequest, | ||
}; | ||
} else { | ||
return { | ||
categoryId: categoryId || null, | ||
subfolderIdArray: subfolderRequest || [], | ||
subfolderRequest: subfolderRequest || [], | ||
}; | ||
} | ||
}) | ||
).then((response: any) => { | ||
const foldersMap = response | ||
.map((res: any) => [...res.subfolderIdArray]) | ||
.flat(); | ||
// Recursively get folders from SFMC | ||
do { | ||
let categoryId = folders[0]; | ||
// SFMC Folder response checking for subfolders | ||
let subfolderRequest = await this.getSubfolders({ | ||
contentType: request.contentType, | ||
parentId: categoryId, | ||
const resultsMap = response | ||
.map((res: any) => [...res.subfolderRequest]) | ||
.flat(); | ||
return { | ||
folderIds: foldersMap || [], | ||
results: resultsMap || [], | ||
}; | ||
}); | ||
if ( | ||
subfolderRequest && | ||
Array.isArray(subfolderRequest) && | ||
subfolderRequest.length > 0 | ||
subfoldersArrayRequest && | ||
subfoldersArrayRequest.folderIds && | ||
subfoldersArrayRequest.folderIds.length | ||
) { | ||
let subfolderIdArray = subfolderRequest.map( | ||
(folder: { ID: number }) => folder.ID | ||
); | ||
folders.push(...subfolderIdArray); | ||
results = [...results, ...subfolderRequest]; | ||
folders = []; | ||
folders = subfoldersArrayRequest.folderIds; | ||
results = subfoldersArrayRequest.results && | ||
subfoldersArrayRequest.results.length && [ | ||
...results, | ||
...subfoldersArrayRequest.results, | ||
]; | ||
} else { | ||
folders = []; | ||
} | ||
folders.shift(); | ||
} while (folders.length !== 0); | ||
return results || []; | ||
return results.sort((a: any, b: any) => b.ID - a.ID); | ||
} catch (err) { | ||
console.log(err); | ||
return handleError(err); | ||
return err; | ||
} | ||
@@ -390,3 +411,3 @@ } | ||
...new Map( | ||
[...up.results, ...down].map((item) => [item['Name'], item]) | ||
[...up.results, ...down].map((item) => [item['ID'], item]) | ||
).values(), | ||
@@ -393,0 +414,0 @@ ], |
{ | ||
"name": "@basetime/bldr-sfmc-sdk", | ||
"version": "1.1.1", | ||
"version": "1.1.2", | ||
"description": "SDK for BLDR SFMC Core Functionality", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
365991
128
9993