New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@basetime/bldr-sfmc-sdk

Package Overview
Dependencies
Maintainers
2
Versions
69
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@basetime/bldr-sfmc-sdk - npm Package Compare versions

Comparing version 1.0.7 to 1.0.8

2

dist/cli/contentBuilder/index.d.ts

@@ -112,3 +112,3 @@ import { SFMC_Client } from '../types/sfmc_client';

updateContentBuilderAssetContent: (asset: any, content: string) => any;
setContentBuilderPackageAssets(packageOut: any, contextAssets: any[]): Promise<{
setContentBuilderPackageAssets: (packageOut: any, contextAssets: any[]) => Promise<{
id: any;

@@ -115,0 +115,0 @@ bldrId: any;

@@ -210,3 +210,3 @@ "use strict";

assetResponse.category.id;
const folderResponse = yield this.sfmc.folder.getParentFoldersRecursive({
const folderResponse = yield this.sfmc.folder.getFoldersFromMiddle({
contentType: 'asset',

@@ -261,2 +261,20 @@ categoryId,

};
this.setContentBuilderPackageAssets = (packageOut, contextAssets) => __awaiter(this, void 0, void 0, function* () {
packageOut['contentBuilder'] = {};
return packageOut['contentBuilder']['assets'] = contextAssets.map((asset) => {
return {
id: asset.id,
bldrId: asset.bldrId,
name: asset.name,
assetType: asset.assetType,
category: {
folderPath: (asset.category &&
asset.category
.folderPath) ||
asset.folderPath,
},
content: (0, GetContentBuilderAssetContent_1.getContentBuilderAssetContent)(asset),
};
});
});
/**

@@ -313,185 +331,3 @@ *

}
// if (dependency) {
// let dependencyContext = dependency.context;
// dependencies[dependencyContext] =
// dependencies[dependencyContext] || Array();
// content = content.replace(
// dependency.matchedValue,
// dependency.payload.bldrId
// );
// dependencies[dependencyContext].push(dependency);
// asset.dependencies = asset.dependencies || new Array();
// asset.dependencies.push({
// context: dependencyContext,
// reference,
// bldrId: dependency.payload.bldrId,
// });
// // remove matched value from dependency object
// delete dependency.matchedValue;
// } else {
// let refBldrId;
// let assetRefObject;
// let dependencyContext;
// switch (reference) {
// case 'Lookup':
// case 'LookupOrderedRows':
// case 'LookupOrderedRowsCS':
// case 'LookupRows':
// case 'LookupRowsCS':
// case 'DataExtensionRowCount':
// case 'DeleteData':
// case 'DeleteDE':
// case 'InsertDE':
// case 'UpdateData':
// case 'UpdateDE':
// case 'UpsertData':
// case 'UpsertDE':
// case 'ClaimRow':
// refBldrId = '';
// dependencyContext = 'emailStudio';
// break;
// case 'ContentBlockById':
// case 'ContentBlockByID':
// assetRefObject = packageOut['contentBuilder']['assets'].find((packageAsset: any) =>
// Number(packageAsset.id) === Number(matchedValue)
// );
// refBldrId = assetRefObject?.bldrId;
// dependencyContext = 'contentBuilder';
// break;
// case 'ContentBlockByName':
// assetRefObject = packageOut['contentBuilder']['assets'].find((packageAsset: any) => {
// return (
// `${packageAsset.category.folderPath.replaceAll(
// '/',
// '\\'
// )}\\${packageAsset.name}` ===
// matchedValue
// );
// });
// if (!assetRefObject) {
// assetRefObject = packageOut['contentBuilder']['assets'].find(
// (packageAsset: any) => {
// return (
// `${packageAsset.category.folderPath.replaceAll(
// '/',
// '\\\\'
// )}\\\\${packageAsset.name}` ===
// matchedValue
// );
// }
// );
// }
// refBldrId = assetRefObject.bldrId;
// dependencyContext = 'contentBuilder';
// break;
// }
// content = content.replace(matchedValue, refBldrId);
// asset.dependencies =
// asset.dependencies || new Array();
// asset.dependencies.push({
// context: dependencyContext,
// reference,
// bldrId: refBldrId,
// });
// }
// }
}
// delete asset.id;
// delete asset.customerKey;
// delete asset.category.id;
// delete asset.category.name;
// delete asset.category.parentId;
// asset = await this.updateContentBuilderAssetContent(asset, content);
// if (dependency) {
// let dependencyContext = dependency.context;
// dependencies[dependencyContext] =
// dependencies[dependencyContext] || Array();
// content = content.replace(
// dependency.matchedValue,
// dependency.payload.bldrId
// );
// // remove matched value from dependency object
// delete dependency.matchedValue;
// dependencies[dependencyContext].push(dependency);
// asset.dependencies =
// asset.dependencies || new Array();
// asset.dependencies.push({
// context: dependencyContext,
// ref: ref,
// bldrId: dependency.payload.bldrId,
// });
// } else {
// let refBldrId;
// let assetRefObject;
// let dependencyContext;
// switch (reference) {
// case 'Lookup':
// case 'LookupOrderedRows':
// case 'LookupOrderedRowsCS':
// case 'LookupRows':
// case 'LookupRowsCS':
// case 'DataExtensionRowCount':
// case 'DeleteData':
// case 'DeleteDE':
// case 'InsertDE':
// case 'UpdateData':
// case 'UpdateDE':
// case 'UpsertData':
// case 'UpsertDE':
// case 'ClaimRow':
// refBldrId = '';
// dependencyContext = 'dataExtension';
// break;
// case 'ContentBlockById':
// case 'ContentBlockByID':
// assetRefObject = packageOut['contentBuilder']['assets'].find((packageAsset: any) =>
// packageAsset.id === Number(matchedValue)
// );
// refBldrId = assetRefObject?.bldrId;
// dependencyContext = 'contentBuilder';
// break;
// case 'ContentBlockByName':
// assetRefObject = assets.find((depAsset) => {
// return (
// `${depAsset.category.folderPath.replaceAll(
// '/',
// '\\'
// )}\\${depAsset.name}` ===
// matchedValue
// );
// });
// if (!assetRefObject) {
// assetRefObject = assets.find(
// (depAsset) => {
// return (
// `${depAsset.category.folderPath.replaceAll(
// '/',
// '\\\\'
// )}\\\\${depAsset.name}` ===
// matchedValue
// );
// }
// );
// }
// refBldrId = assetRefObject.bldrId;
// dependencyContext = 'contentBuilder';
// break;
// }
// content = content.replace(matchedValue, refBldrId);
// asset.dependencies =
// asset.dependencies || new Array();
// asset.dependencies.push({
// context: dependencyContext,
// ref: ref,
// bldrId: refBldrId,
// });
// }
// }
// }
// delete asset.id;
// delete asset.customerKey;
// delete asset.category.id;
// delete asset.category.name;
// delete asset.category.parentId;
// asset = await utils.updateAssetContent(asset, content);
}

@@ -504,3 +340,3 @@ return {

catch (err) {
console.log(err);
console.log('Some dependencies in package do not exist');
}

@@ -510,23 +346,3 @@ });

}
setContentBuilderPackageAssets(packageOut, contextAssets) {
return __awaiter(this, void 0, void 0, function* () {
packageOut['contentBuilder'] = {};
return packageOut['contentBuilder']['assets'] = contextAssets.map((asset) => {
return {
id: asset.id,
bldrId: asset.bldrId,
name: asset.name,
assetType: asset.assetType,
category: {
folderPath: (asset.category &&
asset.category
.folderPath) ||
asset.folderPath,
},
content: (0, GetContentBuilderAssetContent_1.getContentBuilderAssetContent)(asset),
};
});
});
}
}
exports.ContentBuilder = ContentBuilder;

@@ -162,3 +162,2 @@ "use strict";

});
console.log('formatted', formattedFolders);
return {

@@ -165,0 +164,0 @@ folders: formattedFolders,

@@ -18,3 +18,4 @@ "use strict";

let folders = yield (0, _1.uniqueArrayByKey)(simplifiedFolders, 'ID');
const foldersOut = []; //object[]
folders = folders.sort((a, b) => a.ID - b.ID);
const foldersOut = [];
const compiledFolderPaths = [];

@@ -43,3 +44,3 @@ let path = '';

const folder = folders[f];
const parentFolder = folder.ParentFolder.Name;
const parentFolder = folder.ParentFolder.Name || parentFolderObject.Name;
let parentIsRootFolder = parentFolder === rootFolder ? true : false;

@@ -76,3 +77,3 @@ if (parentIsRootFolder) {

// Remove processed Object from Original Array
folders.splice(folders.findIndex((orgFolder) => orgFolder.ID === folder.ID), 1);
folders.splice(folders.findIndex((orgFolder) => Number(orgFolder.ID) === Number(folder.ID)), 1);
// Reset Path String

@@ -79,0 +80,0 @@ path = '';

@@ -392,3 +392,2 @@ "use strict";

catch (err) {
console.log(err);
return err;

@@ -395,0 +394,0 @@ }

@@ -61,3 +61,6 @@ import { Client } from '../types/sfmc_client';

categoryId: number;
}): Promise<any[]>;
}): Promise<{
results: any[];
stop: Boolean;
}>;
/**

@@ -64,0 +67,0 @@ * Method to gather and format all SFMC Folders recursively from top level starting point

@@ -155,3 +155,10 @@ "use strict";

results = [...rootFolderRequest.Results];
stopFolderId = rootFolderRequest.Results[0].ID;
stopFolderId = rootFolderRequest.Results[0].ParentFolder.ID;
if (rootFolderRequest.Results[0].ID === request.categoryId) {
console.log('return matched root');
return {
results,
stop: true
};
}
}

@@ -192,8 +199,10 @@ }

parentResult.ParentFolder &&
parentResult.ParentFolder.ID) ||
null;
parentResult.ParentFolder.ID);
}
} while (!stopFolderId || parentId === stopFolderId);
} while (parentId !== 0);
}
return results;
return {
results,
stop: false
};
});

@@ -260,7 +269,6 @@ }

return __awaiter(this, void 0, void 0, function* () {
let results = [];
let up = (yield this.getParentFoldersRecursive(request)) || [];
let down = (yield this.getSubfoldersRecursive(request)) || [];
let down = !up.stop && (yield this.getSubfoldersRecursive(request)) || [];
return [
...new Map([...up, ...down].map((item) => [item['Name'], item])).values(),
...new Map([...up.results, ...down].map((item) => [item['Name'], item])).values(),
];

@@ -267,0 +275,0 @@ });

@@ -183,3 +183,2 @@ import { SFMC_Client } from '../types/sfmc_client';

const buildFolderPaths = await buildFolderPathsSoap(folderResponse);

@@ -263,2 +262,3 @@ const isolateFolderIds =

if (

@@ -278,4 +278,5 @@ assetResponse &&

const folderResponse =
await this.sfmc.folder.getParentFoldersRecursive({
await this.sfmc.folder.getFoldersFromMiddle({
contentType: 'asset',

@@ -286,2 +287,4 @@ categoryId,

const buildFolderPaths = await buildFolderPathsSoap(folderResponse);
const formattedAssetResponse =

@@ -295,2 +298,3 @@ assetResponse &&

const formattedFolders = buildFolderPaths.folders.map((folder) => {

@@ -305,2 +309,3 @@ return {

return {

@@ -344,6 +349,6 @@ folders: formattedFolders,

async setContentBuilderPackageAssets(
setContentBuilderPackageAssets = async (
packageOut: any,
contextAssets: any[]
) {
) => {
packageOut['contentBuilder'] = {};

@@ -438,221 +443,5 @@ return packageOut['contentBuilder']['assets'] = contextAssets.map(

}
// if (dependency) {
// let dependencyContext = dependency.context;
// dependencies[dependencyContext] =
// dependencies[dependencyContext] || Array();
// content = content.replace(
// dependency.matchedValue,
// dependency.payload.bldrId
// );
// dependencies[dependencyContext].push(dependency);
// asset.dependencies = asset.dependencies || new Array();
// asset.dependencies.push({
// context: dependencyContext,
// reference,
// bldrId: dependency.payload.bldrId,
// });
// // remove matched value from dependency object
// delete dependency.matchedValue;
// } else {
// let refBldrId;
// let assetRefObject;
// let dependencyContext;
// switch (reference) {
// case 'Lookup':
// case 'LookupOrderedRows':
// case 'LookupOrderedRowsCS':
// case 'LookupRows':
// case 'LookupRowsCS':
// case 'DataExtensionRowCount':
// case 'DeleteData':
// case 'DeleteDE':
// case 'InsertDE':
// case 'UpdateData':
// case 'UpdateDE':
// case 'UpsertData':
// case 'UpsertDE':
// case 'ClaimRow':
// refBldrId = '';
// dependencyContext = 'emailStudio';
// break;
// case 'ContentBlockById':
// case 'ContentBlockByID':
// assetRefObject = packageOut['contentBuilder']['assets'].find((packageAsset: any) =>
// Number(packageAsset.id) === Number(matchedValue)
// );
// refBldrId = assetRefObject?.bldrId;
// dependencyContext = 'contentBuilder';
// break;
// case 'ContentBlockByName':
// assetRefObject = packageOut['contentBuilder']['assets'].find((packageAsset: any) => {
// return (
// `${packageAsset.category.folderPath.replaceAll(
// '/',
// '\\'
// )}\\${packageAsset.name}` ===
// matchedValue
// );
// });
// if (!assetRefObject) {
// assetRefObject = packageOut['contentBuilder']['assets'].find(
// (packageAsset: any) => {
// return (
// `${packageAsset.category.folderPath.replaceAll(
// '/',
// '\\\\'
// )}\\\\${packageAsset.name}` ===
// matchedValue
// );
// }
// );
// }
// refBldrId = assetRefObject.bldrId;
// dependencyContext = 'contentBuilder';
// break;
// }
// content = content.replace(matchedValue, refBldrId);
// asset.dependencies =
// asset.dependencies || new Array();
// asset.dependencies.push({
// context: dependencyContext,
// reference,
// bldrId: refBldrId,
// });
// }
// }
}
}
// delete asset.id;
// delete asset.customerKey;
// delete asset.category.id;
// delete asset.category.name;
// delete asset.category.parentId;
// asset = await this.updateContentBuilderAssetContent(asset, content);
// if (dependency) {
// let dependencyContext = dependency.context;
// dependencies[dependencyContext] =
// dependencies[dependencyContext] || Array();
// content = content.replace(
// dependency.matchedValue,
// dependency.payload.bldrId
// );
// // remove matched value from dependency object
// delete dependency.matchedValue;
// dependencies[dependencyContext].push(dependency);
// asset.dependencies =
// asset.dependencies || new Array();
// asset.dependencies.push({
// context: dependencyContext,
// ref: ref,
// bldrId: dependency.payload.bldrId,
// });
// } else {
// let refBldrId;
// let assetRefObject;
// let dependencyContext;
// switch (reference) {
// case 'Lookup':
// case 'LookupOrderedRows':
// case 'LookupOrderedRowsCS':
// case 'LookupRows':
// case 'LookupRowsCS':
// case 'DataExtensionRowCount':
// case 'DeleteData':
// case 'DeleteDE':
// case 'InsertDE':
// case 'UpdateData':
// case 'UpdateDE':
// case 'UpsertData':
// case 'UpsertDE':
// case 'ClaimRow':
// refBldrId = '';
// dependencyContext = 'dataExtension';
// break;
// case 'ContentBlockById':
// case 'ContentBlockByID':
// assetRefObject = packageOut['contentBuilder']['assets'].find((packageAsset: any) =>
// packageAsset.id === Number(matchedValue)
// );
// refBldrId = assetRefObject?.bldrId;
// dependencyContext = 'contentBuilder';
// break;
// case 'ContentBlockByName':
// assetRefObject = assets.find((depAsset) => {
// return (
// `${depAsset.category.folderPath.replaceAll(
// '/',
// '\\'
// )}\\${depAsset.name}` ===
// matchedValue
// );
// });
// if (!assetRefObject) {
// assetRefObject = assets.find(
// (depAsset) => {
// return (
// `${depAsset.category.folderPath.replaceAll(
// '/',
// '\\\\'
// )}\\\\${depAsset.name}` ===
// matchedValue
// );
// }
// );
// }
// refBldrId = assetRefObject.bldrId;
// dependencyContext = 'contentBuilder';
// break;
// }
// content = content.replace(matchedValue, refBldrId);
// asset.dependencies =
// asset.dependencies || new Array();
// asset.dependencies.push({
// context: dependencyContext,
// ref: ref,
// bldrId: refBldrId,
// });
// }
// }
// }
// delete asset.id;
// delete asset.customerKey;
// delete asset.category.id;
// delete asset.category.name;
// delete asset.category.parentId;
// asset = await utils.updateAssetContent(asset, content);
}
return {

@@ -662,4 +451,4 @@ newDependencies,

}
} catch (err) {
console.log(err)
} catch (err: any) {
console.log('Some dependencies in package do not exist')
}

@@ -666,0 +455,0 @@

@@ -8,3 +8,5 @@ import { SFMC_SOAP_Folder } from '../../sfmc/types/objects/sfmc_soap_folders';

let folders = await uniqueArrayByKey(simplifiedFolders, 'ID');
const foldersOut = []; //object[]
folders = folders.sort((a,b) => a.ID - b.ID)
const foldersOut = [];
const compiledFolderPaths = [];

@@ -42,3 +44,3 @@ let path = '';

const folder = folders[f];
const parentFolder = folder.ParentFolder.Name;
const parentFolder = folder.ParentFolder.Name || parentFolderObject.Name;
let parentIsRootFolder = parentFolder === rootFolder ? true : false;

@@ -51,2 +53,3 @@

folder.FolderPath = path;
// Add Folder Object to Output Array

@@ -56,2 +59,3 @@ foldersOut.push(folder);

compiledFolderPaths.push(path);
// Remove processed Object from Original Array

@@ -64,2 +68,3 @@ folders.splice(

);
// Reset Path String

@@ -69,2 +74,3 @@ path = '';

let parentId = folder.ParentFolder.ID;
let compiledParentFolder = foldersOut.find(

@@ -86,9 +92,11 @@ (compiledFolder) => compiledFolder.ID === parentId

compiledFolderPaths.push(path);
// Remove processed Object from Original Array
folders.splice(
folders.findIndex(
(orgFolder) => orgFolder.ID === folder.ID
(orgFolder) => Number(orgFolder.ID) === Number(folder.ID)
),
1
);
// Reset Path String

@@ -95,0 +103,0 @@ path = '';

@@ -604,3 +604,2 @@ import { Client } from '../types/sfmc_client';

} catch (err) {
console.log(err)
return err

@@ -607,0 +606,0 @@ }

@@ -10,395 +10,404 @@ import { Client } from '../types/sfmc_client';

export class Folder {
client;
sfmc_context;
constructor(client: Client, sfmc_context_mapping: SFMCContextMapping[]) {
this.client = client;
this.sfmc_context = sfmc_context_mapping;
client;
sfmc_context;
constructor(client: Client, sfmc_context_mapping: SFMCContextMapping[]) {
this.client = client;
this.sfmc_context = sfmc_context_mapping;
}
/**
* Search SFMC Folders using SOAP DataFolder Object
*
* @param {string} request.contentType
* @param {string} request.searchKey
* @param {string} request.searchTerm
* @returns
*/
async search(request: {
contentType: string;
searchKey: string;
searchTerm: string;
}): Promise<{
OverallStatus: string;
Results: any[];
}> {
try {
const resp = await this.client.soap.retrieve(
'DataFolder',
DataFolder,
{
filter: {
leftOperand: {
leftOperand: 'ContentType',
operator: 'equals',
rightOperand: request.contentType,
},
operator: 'AND',
rightOperand: {
leftOperand: request.searchKey,
operator: 'like',
rightOperand: request.searchTerm,
},
},
}
);
if (resp.OverallStatus !== 'OK') {
return resp.OverallStatus;
}
return resp;
} catch (err: any) {
return handleError(err);
}
/**
* Search SFMC Folders using SOAP DataFolder Object
*
* @param {string} request.contentType
* @param {string} request.searchKey
* @param {string} request.searchTerm
* @returns
*/
async search(request: {
contentType: string;
searchKey: string;
searchTerm: string;
}): Promise<{
OverallStatus: string;
Results: any[];
}> {
try {
const resp = await this.client.soap.retrieve(
'DataFolder',
DataFolder,
{
filter: {
leftOperand: {
leftOperand: 'ContentType',
operator: 'equals',
rightOperand: request.contentType,
},
operator: 'AND',
rightOperand: {
leftOperand: request.searchKey,
operator: 'like',
rightOperand: request.searchTerm,
},
},
}
);
}
/**
* Get a single SFMC Folder Object via SOAP API
* If subfolders === false id refers to the folder you are retrieving
* If subfolders === true id refers to the parent folder
*
* @param {string} request.contentType
* @param {number} request.categoryId
* @returns
*/
async getFolder(request: {
contentType: string;
categoryId: number;
}): Promise<{
OverallStatus: string;
Results: SFMC_SOAP_Folder[];
}> {
try {
const resp = await this.client.soap.retrieve(
'DataFolder',
DataFolder,
{
filter: {
leftOperand: {
leftOperand: 'ContentType',
operator: 'equals',
rightOperand: request.contentType,
},
operator: 'AND',
rightOperand: {
leftOperand: 'ID',
operator: 'equals',
rightOperand: request.categoryId,
},
},
}
);
if (resp.OverallStatus !== 'OK') {
return resp.OverallStatus;
}
if (resp.OverallStatus !== 'OK') {
throw new Error('Unable to Retrieve Folders');
}
return resp;
} catch (err: any) {
return handleError(err);
}
return resp;
} catch (err: any) {
return handleError(err);
}
/**
* Get a single SFMC Folder Object via SOAP API
* If subfolders === false id refers to the folder you are retrieving
* If subfolders === true id refers to the parent folder
*
* @param {string} request.contentType
* @param {number} request.categoryId
* @returns
*/
async getFolder(request: {
contentType: string;
categoryId: number;
}): Promise<{
}
/**
* Get SFMC Subfolders based on parentId Object via SOAP API
*
* @param {string} request.contentType
* @param {number} request.parentId
* @returns
*/
async getSubfolders(request: {
contentType: string;
parentId: number;
}): Promise<SFMC_SOAP_Folder[]> {
try {
type folders = SFMC_SOAP_Folder;
const results: folders[] = [];
const response: {
OverallStatus: string;
Results: SFMC_SOAP_Folder[];
}> {
try {
const resp = await this.client.soap.retrieve(
'DataFolder',
DataFolder,
{
filter: {
leftOperand: {
leftOperand: 'ContentType',
operator: 'equals',
rightOperand: request.contentType,
},
operator: 'AND',
rightOperand: {
leftOperand: 'ID',
operator: 'equals',
rightOperand: request.categoryId,
},
},
}
);
} = await this.client.soap.retrieve('DataFolder', DataFolder, {
filter: {
leftOperand: {
leftOperand: 'ContentType',
operator: 'equals',
rightOperand: request.contentType,
},
operator: 'AND',
rightOperand: {
leftOperand: 'ParentFolder.ID',
operator: 'equals',
rightOperand: request.parentId,
},
},
});
if (resp.OverallStatus !== 'OK') {
throw new Error('Unable to Retrieve Folders');
}
if (response && response.OverallStatus !== 'OK') {
throw new Error('Unable to Retrieve Folders');
}
return resp;
} catch (err: any) {
return handleError(err);
}
const responseResults = response.Results;
results.push(...responseResults);
return results;
} catch (err: any) {
return handleError(err);
}
/**
* Get SFMC Subfolders based on parentId Object via SOAP API
*
* @param {string} request.contentType
* @param {number} request.parentId
* @returns
*/
async getSubfolders(request: {
contentType: string;
parentId: number;
}): Promise<SFMC_SOAP_Folder[]> {
try {
type folders = SFMC_SOAP_Folder;
const results: folders[] = [];
}
/**
* Method to compile folder path for for Asset Clone
*
* @param {string} request.contentType
* @param {number} request.categoryId
* @returns {Promise<Object[]>}
*/
async getParentFoldersRecursive(request: {
contentType: string;
categoryId: number;
}): Promise<{results: any[], stop: Boolean}> {
let parentId;
let stopFolderId;
let results: object[] = [];
const response: {
OverallStatus: string;
Results: SFMC_SOAP_Folder[];
} = await this.client.soap.retrieve('DataFolder', DataFolder, {
filter: {
leftOperand: {
leftOperand: 'ContentType',
operator: 'equals',
rightOperand: request.contentType,
},
operator: 'AND',
rightOperand: {
leftOperand: 'ParentFolder.ID',
operator: 'equals',
rightOperand: request.parentId,
},
},
});
const rootFolderContext = this.sfmc_context.find(
(ctx) => ctx.contentType === request.contentType
);
if (response && response.OverallStatus !== 'OK') {
throw new Error('Unable to Retrieve Folders');
if (rootFolderContext) {
const rootFolderRequest = await this.search({
contentType: request.contentType,
searchKey: 'Name',
searchTerm: rootFolderContext.rootName,
});
if (
rootFolderRequest &&
rootFolderRequest.Results &&
rootFolderRequest.Results.length
) {
results = [...rootFolderRequest.Results];
stopFolderId = rootFolderRequest.Results[0].ParentFolder.ID;
if(rootFolderRequest.Results[0].ID === request.categoryId){
console.log('return matched root')
return {
results,
stop: true
}
const responseResults = response.Results;
results.push(...responseResults);
return results;
} catch (err: any) {
return handleError(err);
}
}
}
/**
* Method to compile folder path for for Asset Clone
*
* @param {string} request.contentType
* @param {number} request.categoryId
* @returns {Promise<Object[]>}
*/
async getParentFoldersRecursive(request: {
contentType: string;
categoryId: number;
}): Promise<any[]> {
let parentId;
let stopFolderId;
let results: object[] = [];
const rootFolderContext = this.sfmc_context.find(
(ctx) => ctx.contentType === request.contentType
);
const initialCategory = await this.getFolder(request);
if (rootFolderContext) {
const rootFolderRequest = await this.search({
contentType: request.contentType,
searchKey: 'Name',
searchTerm: rootFolderContext.rootName,
});
if (initialCategory.OverallStatus !== 'OK') {
console.log(initialCategory);
}
if (
rootFolderRequest &&
rootFolderRequest.Results &&
rootFolderRequest.Results.length
) {
results = [...rootFolderRequest.Results];
stopFolderId = rootFolderRequest.Results[0].ID;
}
}
if (
initialCategory &&
initialCategory.Results &&
initialCategory.Results.length
) {
const initResult = initialCategory.Results[0];
results = [...results, ...initialCategory.Results];
parentId =
(initResult &&
initResult.ParentFolder &&
initResult.ParentFolder.ID) ||
null;
}
const initialCategory = await this.getFolder(request);
if (parentId) {
do {
const parentRequest =
parentId &&
(await this.getFolder({
contentType: request.contentType,
categoryId: parentId,
}));
if (initialCategory.OverallStatus !== 'OK') {
console.log(initialCategory);
if (parentRequest && parentRequest.OverallStatus !== 'OK') {
console.log(parentRequest);
}
if (
initialCategory &&
initialCategory.Results &&
initialCategory.Results.length
parentRequest &&
parentRequest.Results &&
parentRequest.Results.length
) {
const initResult = initialCategory.Results[0];
results = [...results, ...initialCategory.Results];
parentId =
(initResult &&
initResult.ParentFolder &&
initResult.ParentFolder.ID) ||
null;
}
const parentResult: {
ParentFolder: {
ID: number;
};
} = parentRequest.Results[0];
if (parentId) {
do {
const parentRequest =
parentId &&
(await this.getFolder({
contentType: request.contentType,
categoryId: parentId,
}));
if (parentRequest && parentRequest.OverallStatus !== 'OK') {
console.log(parentRequest);
}
if (
parentRequest &&
parentRequest.Results &&
parentRequest.Results.length
) {
const parentResult: {
ParentFolder: {
ID: number;
};
} = parentRequest.Results[0];
results.push(...parentRequest.Results);
parentId =
(parentResult &&
parentResult.ParentFolder &&
parentResult.ParentFolder.ID) ||
null;
}
} while (!stopFolderId || parentId === stopFolderId);
results.push(...parentRequest.Results);
parentId =
(parentResult &&
parentResult.ParentFolder &&
parentResult.ParentFolder.ID)
}
return results;
} while (parentId !== 0);
}
/**
* Method to gather and format all SFMC Folders recursively from top level starting point
*
* @param {string} request.contentType
* @param {integer} request.categoryId
* @returns
*/
async getSubfoldersRecursive(request: {
contentType: string;
categoryId: number;
}) {
try {
let folders: number[] = [];
let results: any[] = [];
return {
results,
stop: false
};
}
/**
* Method to gather and format all SFMC Folders recursively from top level starting point
*
* @param {string} request.contentType
* @param {integer} request.categoryId
* @returns
*/
async getSubfoldersRecursive(request: {
contentType: string;
categoryId: number;
}) {
try {
let folders: number[] = [];
let results: any[] = [];
// Get target folder from SFMC
let rootRequest = await this.getFolder(request);
// Get target folder from SFMC
let rootRequest = await this.getFolder(request);
// Ensure response has results
if (!Object.prototype.hasOwnProperty.call(rootRequest, 'Results')) {
throw new Error(`Unable to find folder`);
}
// 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];
}
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 = await this.getSubfolders({
contentType: request.contentType,
parentId: categoryId,
});
// 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,
});
if (
subfolderRequest &&
Array.isArray(subfolderRequest) &&
subfolderRequest.length > 0
) {
let subfolderIdArray = subfolderRequest.map(
(folder: { ID: number }) => folder.ID
);
folders.push(...subfolderIdArray);
results = [...results, ...subfolderRequest];
}
if (
subfolderRequest &&
Array.isArray(subfolderRequest) &&
subfolderRequest.length > 0
) {
let subfolderIdArray = subfolderRequest.map(
(folder: { ID: number }) => folder.ID
);
folders.push(...subfolderIdArray);
results = [...results, ...subfolderRequest];
}
folders.shift();
} while (folders.length !== 0);
folders.shift();
} while (folders.length !== 0);
return results || [];
} catch (err) {
console.log(err);
return handleError(err);
}
return results || [];
} catch (err) {
console.log(err);
return handleError(err);
}
/**
* Retrieve all folders top and bottom from a specific categoryId
*
* @param {string} request.contentType
* @param {integer} request.categoryId
* @returns
*/
async getFoldersFromMiddle(request: {
contentType: string;
categoryId: number;
}) {
let results: any[] = [];
let up = await this.getParentFoldersRecursive(request) || [];
let down = await this.getSubfoldersRecursive(request) || [];
}
/**
* Retrieve all folders top and bottom from a specific categoryId
*
* @param {string} request.contentType
* @param {integer} request.categoryId
* @returns
*/
async getFoldersFromMiddle(request: {
contentType: string;
categoryId: number;
}) {
let up = await this.getParentFoldersRecursive(request) || [];
let down = !up.stop && await this.getSubfoldersRecursive(request) || [];
return [
...new Map(
[...up, ...down].map((item) => [item['Name'], item])
).values(),
];
}
/**
* Create a folder in SFMC via SOAP Data Folder Object
*
* @param request.contentType
* @param request.name
* @param request.parentId
* @returns {Promise<void>}
*/
async createFolder(request: {
contentType: string;
name: string;
parentId: number;
}): Promise<void> {
try {
const resp = await this.client.soap.create(
'DataFolder',
{
ContentType: request.contentType,
Name: request.name,
Description: request.name,
IsActive: true,
IsEditable: true,
AllowChildren: true,
ParentFolder: {
ID: request.parentId,
},
},
{}
);
return [
...new Map(
[...up.results, ...down].map((item) => [item['Name'], item])
).values(),
];
}
/**
* Create a folder in SFMC via SOAP Data Folder Object
*
* @param request.contentType
* @param request.name
* @param request.parentId
* @returns {Promise<void>}
*/
async createFolder(request: {
contentType: string;
name: string;
parentId: number;
}): Promise<void> {
try {
const resp = await this.client.soap.create(
'DataFolder',
{
ContentType: request.contentType,
Name: request.name,
Description: request.name,
IsActive: true,
IsEditable: true,
AllowChildren: true,
ParentFolder: {
ID: request.parentId,
},
},
{}
);
return resp;
} catch (err: any) {
if (err.response.data.includes('cannot contain child folders')) {
await this._updateAllowChildren({
contentType: request.contentType,
categoryId: request.parentId,
});
const errCreate = await this.createFolder(request);
return errCreate;
}
return resp;
} catch (err: any) {
if (err.response.data.includes('cannot contain child folders')) {
await this._updateAllowChildren({
contentType: request.contentType,
categoryId: request.parentId,
});
const errCreate = await this.createFolder(request);
return errCreate;
}
return handleError(err);
}
return handleError(err);
}
/**
* When a folder exists in SFMC and is created in the UI, it by default does not allow children folders. This function updates that permission on the folder.
*
* @param request.contentType
* @param request.categoryId
* @returns
*/
async _updateAllowChildren(request: {
contentType: string;
categoryId: number;
}) {
try {
const resp = await this.client.soap.update(
'DataFolder',
{
ID: request.categoryId,
ContentType: request.contentType,
IsActive: true,
IsEditable: true,
AllowChildren: true,
},
{}
);
}
/**
* When a folder exists in SFMC and is created in the UI, it by default does not allow children folders. This function updates that permission on the folder.
*
* @param request.contentType
* @param request.categoryId
* @returns
*/
async _updateAllowChildren(request: {
contentType: string;
categoryId: number;
}) {
try {
const resp = await this.client.soap.update(
'DataFolder',
{
ID: request.categoryId,
ContentType: request.contentType,
IsActive: true,
IsEditable: true,
AllowChildren: true,
},
{}
);
return resp;
} catch (err) {
return handleError(err);
}
return resp;
} catch (err) {
return handleError(err);
}
}
}
{
"name": "@basetime/bldr-sfmc-sdk",
"version": "1.0.7",
"version": "1.0.8",
"description": "SDK for BLDR SFMC Core Functionality",

@@ -5,0 +5,0 @@ "main": "dist/index.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc