Skip to content

Commit c803c58

Browse files
committed
For topcoder-archive#12: Add option to stream a download
1 parent 9d86ff4 commit c803c58

File tree

3 files changed

+24
-23
lines changed

3 files changed

+24
-23
lines changed

index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,8 @@ module.exports = (allConfig) => {
226226
return require('./src/SubmissionsApi').deleteSubmission(config, submissionId, jwt)
227227
},
228228
// Download submission
229-
downloadSubmission: (submissionId, jwt) => {
230-
return require('./src/SubmissionsApi').downloadSubmission(config, submissionId, jwt)
229+
downloadSubmission: (submissionId, jwt, streamed) => {
230+
return require('./src/SubmissionsApi').downloadSubmission(config, submissionId, jwt, streamed)
231231
},
232232
// Create artifact for submission
233233
createArtifact: (submissionId, reqFormData, jwt) => {
@@ -238,8 +238,8 @@ module.exports = (allConfig) => {
238238
return require('./src/SubmissionsApi').listArtifacts(config, submissionId, jwt)
239239
},
240240
// Download artifact
241-
downloadArtifact: (submissionId, artifactId, jwt) => {
242-
return require('./src/SubmissionsApi').downloadArtifact(config, submissionId, artifactId, jwt)
241+
downloadArtifact: (submissionId, artifactId, jwt, streamed = false) => {
242+
return require('./src/SubmissionsApi').downloadArtifact(config, submissionId, artifactId, jwt, streamed)
243243
},
244244
// Delete artifact
245245
deleteArtifact: (submissionId, artifactId, jwt) => {

src/SubmissionsApi.js

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,11 @@ const deleteSubmission = (config, submissionId, jwt = null) => {
116116
* Function to download submission by id.
117117
* @param {Object} config Configuration object
118118
* @param {String} submissionId the submission id
119+
* @param {Boolean} streamed Whether a stream is to be returned (Default: false)
119120
* @returns {Promise} the submission file content
120121
*/
121-
const downloadSubmission = (config, submissionId, jwt = null) => {
122-
return helper.reqToV5APIDownload(config, jwt, `${config.SUBMISSION_API_URL}/submissions/${submissionId}/download`)
122+
const downloadSubmission = (config, submissionId, jwt = null, streamed = false) => {
123+
return helper.reqToV5APIDownload(config, jwt, `${config.SUBMISSION_API_URL}/submissions/${submissionId}/download`, streamed)
123124
}
124125

125126
/**
@@ -149,21 +150,11 @@ const listArtifacts = (config, submissionId, jwt = null) => {
149150
* @param {Object} config Configuration object
150151
* @param {String} submissionId the submission id
151152
* @param {String} artifactId the artifact id
153+
* @param {Boolean} streamed Whether a stream is to be returned (Default: false)
152154
* @returns {Promise} the artifact file content
153155
*/
154-
const downloadArtifact = (config, submissionId, artifactId, jwt = null) => {
155-
return helper.reqToV5APIDownload(config, jwt, `${config.SUBMISSION_API_URL}/submissions/${submissionId}/artifacts/${artifactId}/download`)
156-
}
157-
158-
/**
159-
* Function to delete artifact using submission id and artifact id
160-
* @param {Object} config Configuration object
161-
* @param {String} submissionId the submission id
162-
* @param {String} artifactId the artifact id
163-
* @returns {Promise}
164-
*/
165-
const deleteArtifact = (config, submissionId, artifactId, jwt = null) => {
166-
return helper.reqToV5API(config, jwt, 'DELETE', `${config.SUBMISSION_API_URL}/submissions/${submissionId}/artifacts/${artifactId}`)
156+
const downloadArtifact = (config, submissionId, artifactId, jwt = null, streamed = false) => {
157+
return helper.reqToV5APIDownload(config, jwt, `${config.SUBMISSION_API_URL}/submissions/${submissionId}/artifacts/${artifactId}/download`, streamed)
167158
}
168159

169160
module.exports = {
@@ -178,6 +169,5 @@ module.exports = {
178169
downloadSubmission,
179170
createArtifact,
180171
listArtifacts,
181-
downloadArtifact,
182-
deleteArtifact
172+
downloadArtifact
183173
}

src/common/helper.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,22 @@ const reqToV5APIWithFile = async (config, jwt, path, formData, fileFieldName) =>
164164
* Function to download file using V5 API
165165
* @param {Object} config Configuration object
166166
* @param {String} jwt The JWT
167-
* @param (String) path Complete path of the API URL
167+
* @param {String} path Complete path of the API URL
168+
* @param {Boolean} streamed Whether a stream is to be returned (Default: false)
168169
* @returns {Promise}
169170
*/
170-
const reqToV5APIDownload = async (config, jwt, path) => {
171+
const reqToV5APIDownload = async (config, jwt, path, streamed = false) => {
171172
const token = await getToken(config, jwt)
173+
let req = request
174+
.get(path)
175+
.set('Authorization', `Bearer ${token}`)
176+
if (streamed) {
177+
req = req.buffer(false)
178+
req.then = undefined
179+
req.catch = undefined
180+
req.finally = undefined
181+
return req
182+
}
172183
return request
173184
.get(path)
174185
.set('Authorization', `Bearer ${token}`)

0 commit comments

Comments
 (0)