let uploadFile = function()

in source/aws-connect-vm-serverless/src/handler/solution-helper.js [210:287]


let uploadFile = function(filelist, index, destS3Bucket, sourceS3Bucket, sourceS3prefix, baseApi, gwKey, cognitoDomain, clientId, userPoolId, redirDomain, cb) {
    if (filelist.length > index) {
        if (filelist[index].startsWith('static') && (filelist[index].endsWith('js') || filelist[index].endsWith('map'))) {
            let getObjectParams = {
                Bucket: sourceS3Bucket,
                Key: sourceS3prefix + filelist[index]
            };
            s3.getObject(getObjectParams, function (err, result) {
                let data = result.Body.toString('utf-8');
                data = data.replace(/__BASE_API__/g, baseApi).replace(/__API_KEY__/g, gwKey['value']).replace(/__C_DOMAIN__/g, cognitoDomain).replace(/__C_POOL__/g, userPoolId).replace(/__C_CLIENT_ID__/g, clientId).replace(/__C_REDIR__/g, redirDomain);
                
                let putObjectParams = {
                    Body: data,
                    Bucket: destS3Bucket,
                    Key: filelist[index],
                    ContentType: 'application/javascript'
                };
               
                s3.putObject(putObjectParams, function (err, result) {
                    if (err) {
                        console.log("Error putting: " + err);
                    }
                });
                
                let _next = index + 1;
                uploadFile(filelist, _next, destS3Bucket, sourceS3Bucket, sourceS3prefix, baseApi, gwKey, cognitoDomain, clientId, userPoolId, redirDomain,
                    function (err, resp) {
                        if (err) {
                            return cb(err, null);
                        }

                        cb(null, resp);
                });
            });
        } else {
            let params = {
                Bucket: destS3Bucket,
                Key: filelist[index],
                CopySource: sourceS3Bucket + "/" + sourceS3prefix + filelist[index],
                MetadataDirective: "REPLACE"
            };

            if (filelist[index].endsWith('.htm') || filelist[index].endsWith('.html')) {
                params.ContentType = "text/html";
            } else if (filelist[index].endsWith('.css')) {
                params.ContentType = "text/css";
            } else if (filelist[index].endsWith('.js')) {
                params.ContentType = "application/javascript";
            } else if (filelist[index].endsWith('.png')) {
                params.ContentType = "image/png";
            }

            s3.copyObject(params, function(err, data) {
                if (err) {
                    console.log(['error copying ', [sourceS3prefix, filelist[index]].join(''), '\n', err]
                        .join(''));
                } else {
                    console.log([
                        [sourceS3prefix, filelist[index]].join('/'), 'uploaded successfully'
                    ].join(' '));

                    let _next = index + 1;
                    uploadFile(filelist, _next, destS3Bucket, sourceS3Bucket, sourceS3prefix, baseApi, gwKey, cognitoDomain, clientId, userPoolId, redirDomain,
                        function (err, resp) {
                            if (err) {
                                return cb(err, null);
                            }

                            cb(null, resp);
                    });
                }
            });
        }
    } else {
        cb(null, [index, 'files copied'].join(' '));
    }

};