Skip to content
This repository was archived by the owner on Mar 12, 2025. It is now read-only.

Commit 7c029ba

Browse files
committed
For #12: Add option to stream a download
1 parent 9d86ff4 commit 7c029ba

File tree

4 files changed

+48
-11
lines changed

4 files changed

+48
-11
lines changed

docs/SubmissionsApi.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,19 @@ await submissionApiM2MClient.downloadSubmission(submissionId)
669669
await submissionApiUserCredentialsClient.downloadSubmission(submissionId)
670670

671671
await submissionApiJwtMethodArgClient.downloadSubmission(submissionId, config.JWT)
672+
673+
// Stream Model
674+
const outputStream = fs.createWriteStream(filePath)
675+
const req = await submissionApiM2MClient.downloadSubmission(submissionId, artifactId, null, true)
676+
req.pipe(outputStream)
677+
678+
const outputStream = fs.createWriteStream(filePath)
679+
const req = await submissionApiUserCredentialsClient.downloadSubmission(submissionId, artifactId, null, true)
680+
req.pipe(outputStream)
681+
682+
const outputStream = fs.createWriteStream(filePath)
683+
const req = await submissionApiJwtMethodArgClient.downloadSubmission(submissionId, artifactId, config.JWT, true)
684+
req.pipe(outputStream)
672685
```
673686

674687
### Demo
@@ -960,6 +973,19 @@ await submissionApiM2MClient.downloadArtifact(submissionId, artifactId)
960973
await submissionApiUserCredentialsClient.downloadArtifact(submissionId, artifactId)
961974

962975
await submissionApiJwtMethodArgClient.downloadArtifact(submissionId, artifactId, config.JWT)
976+
977+
// Stream Model
978+
const outputStream = fs.createWriteStream(filePath)
979+
const req = await submissionApiM2MClient.downloadArtifact(submissionId, artifactId, null, true)
980+
req.pipe(outputStream)
981+
982+
const outputStream = fs.createWriteStream(filePath)
983+
const req = await submissionApiUserCredentialsClient.downloadArtifact(submissionId, artifactId, null, true)
984+
req.pipe(outputStream)
985+
986+
const outputStream = fs.createWriteStream(filePath)
987+
const req = await submissionApiJwtMethodArgClient.downloadArtifact(submissionId, artifactId, config.JWT, true)
988+
req.pipe(outputStream)
963989
```
964990

965991
### Demo

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 = false) => {
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: 6 additions & 4 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,10 +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+
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)
156158
}
157159

158160
/**

src/common/helper.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,23 @@ 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)
172-
return request
173+
let req = request
173174
.get(path)
174175
.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+
}
183+
return req
175184
.buffer(true)
176185
.parse(function (res, callback) {
177186
res.data = ''

0 commit comments

Comments
 (0)