private async fetchAllObjectKeys()

in src/tasks/S3Download/TaskOperations.ts [107:146]


    private async fetchAllObjectKeys(): Promise<string[]> {
        if (this.taskParameters.sourceFolder) {
            console.log(
                tl.loc('ListingKeysFromPrefix', this.taskParameters.sourceFolder, this.taskParameters.bucketName)
            )
        } else {
            console.log(tl.loc('ListingKeysFromRoot', this.taskParameters.bucketName))
        }

        const allKeys: string[] = []
        // tslint:disable-next-line:no-unnecessary-initializer
        let nextToken: string | undefined = undefined
        do {
            const params: S3.ListObjectsV2Request = {
                Bucket: this.taskParameters.bucketName,
                Prefix: this.taskParameters.sourceFolder,
                ContinuationToken: nextToken
            }
            try {
                const s3Data = await this.s3Client.listObjectsV2(params).promise()
                nextToken = s3Data.NextContinuationToken
                if (s3Data.Contents) {
                    s3Data.Contents.forEach(s3object => {
                        // AWS IDE toolkits can cause 0 byte 'folder markers' to be in the bucket,
                        // filter those out
                        if (s3object.Key) {
                            if (!s3object.Key.endsWith('_$folder$')) {
                                allKeys.push(s3object.Key)
                            }
                        }
                    })
                }
            } catch (err) {
                console.error(err)
                nextToken = undefined
            }
        } while (nextToken)

        return allKeys
    }