async function download()

in src/salesforce_downloader.ts [47:80]


async function download(
	config: Config,
	salesforce: Salesforce,
	folder: Folder & S3Folder,
) {
	console.log('Fetching existing files in S3: ', folder.bucket, folder.prefix);
	const contents = await ls(folder);
	const keys =
		contents?.map((r) => {
			return r.Key?.slice(folder.prefix.length);
		}) || [];
	console.log('Ignoring existing files:', keys);

	console.log('Fetching file list from Saleforce.');
	const documents = await salesforce.getDocuments(folder);
	const filtered = documents.filter((d: { Name: string }) => {
		return !keys.includes(d.Name);
	});

	const uploads = filtered.map(
		async (doc: { Name: string; attributes: { url: string } }) => {
			console.log('Starting download of ', doc.Name);
			const dl = salesforce.getStream(`${doc.attributes.url}/Body`);
			const st = new stream.PassThrough();
			dl.pipe(st);
			console.log('Starting upload to S3 ');
			const streamAsString = await getStream(new stream());
			return upload(streamAsString, doc.Name, folder);
		},
	);
	console.log('Performing upload/downloads.');
	const status = await Promise.all(uploads);
	return { [folder.name]: status.map((s) => s.key) };
}