Skip to content

Files

Latest commit

11810ee · Dec 6, 2019

History

History
1119 lines (831 loc) · 34.3 KB

SubmissionsApi.md

File metadata and controls

1119 lines (831 loc) · 34.3 KB

Submissions Api

All URIs are relative to SUBMISSION_API_URL configuration variable.

Method HTTP request Description
searchSubmissions GET /submissions Search submissions.
headSubmissions HEAD /submissions Same to search submissions, but only response status and headers information return.
createSubmission POST /submissions Create a submission.
getSubmission GET /submissions/{submissionId} Get the submission.
headSubmission HEAD /submissions/{submissionId} Same to get submission, but only response status and headers information return.
updateSubmission PUT /submissions/{submissionId} Fully update submission.
patchSubmission PATCH /submissions/{submissionId} Partially update submission.
deleteSubmission DELETE /submissions/{submissionId} Delete the submission.
downloadSubmission GET /submissions/{submissionId}/download Download the submission.
createArtifact POST /submissions/{submissionId}/artifacts Create artifact for submission.
listArtifacts GET /submissions/{submissionId}/artifacts List artifacts of specified submission.
downloadArtifact GET /submissions/{submissionId}/artifacts/{artifactId}/download Download artifact
deleteArtifact DELETE /submissions/{submissionId}/artifacts/{artifactId} Delete artifact

searchSubmissions

searchSubmissions(reqQuery[, jwt])

Search submissions. Link headers are sent back and they have rel set to prev, next, first, last and contain the relevant URL.

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const reqQuery = {
  page: 1,
  perPage: 10,
  challengeId: 30054692
}

// Promise model
submissionApiM2MClient
  .searchSubmissions(reqQuery)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .searchSubmissions(reqQuery)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .searchSubmissions(reqQuery, config.JWT)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.searchSubmissions(reqQuery)

await submissionApiUserCredentialsClient.searchSubmissions(reqQuery)

await submissionApiJwtMethodArgClient.searchSubmissions(reqQuery, config.JWT)

Parameters

Name Type Description
reqQuery SearchSubmissionsCriteria the search submissions criteria
jwt String the optional json web token

Return type

Array of Submission

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json

headSubmissions

headSubmissions(reqQuery[, jwt])

Same to search submissions, but only response status and headers information return.

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const reqQuery = {
  page: 1,
  perPage: 10,
  challengeId: 30054692
}

// Promise model
submissionApiM2MClient
  .headSubmissions(reqQuery)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .headSubmissions(reqQuery)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .headSubmissions(reqQuery, config.JWT)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.headSubmissions(reqQuery)

await submissionApiUserCredentialsClient.headSubmissions(reqQuery)

await submissionApiJwtMethodArgClient.headSubmissions(reqQuery, config.JWT)

Parameters

Name Type Description
reqQuery SearchSubmissionsCriteria the search submissions criteria
jwt String the optional json web token

Return type

null (empty response body)

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json

createSubmission

createSubmission(reqFormData[, jwt])

Create a submission.

Example

const path = require('path')
const fs = require('fs')
const fileData = fs.readFileSync(path.resolve(__dirname, './data/fileToUpload.zip'))
const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const reqFormData1 = {
  submission: {
    name: 'fileToUpload.zip',
    data: fileData // a Buffer contain file content
  },
  type: 'Contest Submission',
  memberId: 40493050,
  challengeId: 30054692
}

const reqFormData2 = {
  url: 'https://tc-test-submission-scan.s3.amazonaws.com/good.zip',
  type: 'Contest Submission',
  memberId: 40493050,
  challengeId: 30054692
}

// Promise model
submissionApiM2MClient
  .createSubmission(reqFormData1)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .createSubmission(reqFormData1)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .createSubmission(reqFormData1, config.JWT)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.createSubmission(reqFormData2)

await submissionApiUserCredentialsClient.createSubmission(reqFormData2)

await submissionApiJwtMethodArgClient.createSubmission(reqFormData2, config.JWT)

Demo

const config = require('config')
const express = require('express')
const bodyParser = require('body-parser')
const fileUpload = require('express-fileupload')
const cors = require('cors')
const submissionApi = require('topcoder-submission-api-wrapper')
const client = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

// setup express app
const app = express()

app.use(cors())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(fileUpload())
app.set('port', process.env.TEST_PORT || 4000)

app.post('/proxy/submit', function (req, res) {
  let formData = req.body
  if (req.files && req.files.submission) {
    formData.submission = req.files.submission
  }
  client
    .createSubmission(formData)
    .then(result => {
      res.send(result.body)
    })
    .catch(err => {
      res.status(err.status).send(err.response.body)
    })
})

app.listen(app.get('port'), () => {
  console.info(`Express server listening on port ${app.get('port')}`)
})

Parameters

Name Type Description
reqFormData SubmissionData the submission data
jwt String the optional json web token

Return type

Submission

Authorization

Bearer

HTTP request headers

  • Content-Type: multipart/form-data
  • Accept: application/json

getSubmission

getSubmission(submissionId[, jwt])

Get submission by id.

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const submissionId = '8f4e8b6a-0ad2-4ff6-ab19-afeb102ff3b4'

// Promise model
submissionApiM2MClient
  .getSubmission(submissionId)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .getSubmission(submissionId)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .getSubmission(submissionId, config.JWT)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.getSubmission(submissionId)

await submissionApiUserCredentialsClient.getSubmission(submissionId)

await submissionApiJwtMethodArgClient.getSubmission(submissionId, config.JWT)

Parameters

Name Type Description
submissionId String the submission id
jwt String the optional json web token

Return type

Submission

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json

headSubmission

headSubmission(submissionId[, jwt])

Same to get submission, but only response status and headers information return.

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const submissionId = '8f4e8b6a-0ad2-4ff6-ab19-afeb102ff3b4'

// Promise model
submissionApiM2MClient
  .headSubmission(submissionId)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .headSubmission(submissionId)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .headSubmission(submissionId, config.JWT)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.headSubmission(submissionId)

await submissionApiUserCredentialsClient.headSubmission(submissionId)

await submissionApiJwtMethodArgClient.headSubmission(submissionId, config.JWT)

Parameters

Name Type Description
submissionId String the submission id
jwt String the optional json web token

Return type

null (empty response body)

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json

updateSubmission

updateSubmission(submissionId, reqBody[, jwt])

Fully update submission.

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const submissionId = '8f4e8b6a-0ad2-4ff6-ab19-afeb102ff3b4'
const reqBody = {
  url: 'https://tc-test-submission-scan.s3.amazonaws.com/good.zip',
  type: 'Contest Submission',
  memberId: 40493050,
  challengeId: 30054692
}

// Promise model
submissionApiM2MClient
  .updateSubmission(submissionId, reqBody)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .updateSubmission(submissionId, reqBody)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .updateSubmission(submissionId, reqBody, config.JWT)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.updateSubmission(submissionId, reqBody)

await submissionApiUserCredentialsClient.updateSubmission(submissionId, reqBody)

await submissionApiJwtMethodArgClient.updateSubmission(submissionId, reqBody, config.JWT)

Parameters

Name Type Description
submissionId String the submission id
reqBody SubmissionUpdataData the submission data
jwt String the optional json web token

Return type

Submission

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json

patchSubmission

patchSubmission(submissionId, reqBody[, jwt])

Partially update submission.

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const submissionId = '8f4e8b6a-0ad2-4ff6-ab19-afeb102ff3b4'
const reqBody = {
  url: 'https://tc-test-submission-scan.s3.amazonaws.com/good.zip',
  type: 'Contest Submission'
}

// Promise model
submissionApiM2MClient
  .patchSubmission(submissionId, reqBody)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .patchSubmission(submissionId, reqBody)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .patchSubmission(submissionId, reqBody, config.JWT)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.patchSubmission(submissionId, reqBody)

await submissionApiUserCredentialsClient.patchSubmission(submissionId, reqBody)

await submissionApiJwtMethodArgClient.patchSubmission(submissionId, reqBody, config.JWT)

Parameters

Name Type Description
submissionId String the submission id
reqBody SubmissionUpdataData the submission data
jwt String the optional json web token

Return type

Submission

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json

deleteSubmission

deleteSubmission(submissionId[, jwt])

Delete submission by id.

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const submissionId = '8f4e8b6a-0ad2-4ff6-ab19-afeb102ff3b4'

// Promise model
submissionApiM2MClient
  .deleteSubmission(submissionId)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .deleteSubmission(submissionId)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .deleteSubmission(submissionId, config.JWT)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.deleteSubmission(submissionId)

await submissionApiUserCredentialsClient.deleteSubmission(submissionId)

await submissionApiJwtMethodArgClient.deleteSubmission(submissionId, config.JWT)

Parameters

Name Type Description
submissionId String the submission id
jwt String the optional json web token

Return type

null (empty response body)

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json

downloadSubmission

downloadSubmission(submissionId[, jwt])

Download submission by id.

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const submissionId = '8f4e8b6a-0ad2-4ff6-ab19-afeb102ff3b4'

// Promise model
submissionApiM2MClient
  .downloadSubmission(submissionId)
  .then(result => console.log(result.status, result.body))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .downloadSubmission(submissionId)
  .then(result => console.log(result.status, result.body))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .downloadSubmission(submissionId, config.JWT)
  .then(result => console.log(result.status, result.body))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.downloadSubmission(submissionId)

await submissionApiUserCredentialsClient.downloadSubmission(submissionId)

await submissionApiJwtMethodArgClient.downloadSubmission(submissionId, config.JWT)

// Stream Model
const outputStream = fs.createWriteStream(filePath)
const req = await submissionApiM2MClient.downloadSubmission(submissionId, null, true)
req.pipe(outputStream)

const outputStream = fs.createWriteStream(filePath)
const req = await submissionApiUserCredentialsClient.downloadSubmission(submissionId, null, true)
req.pipe(outputStream)

const outputStream = fs.createWriteStream(filePath)
const req = await submissionApiJwtMethodArgClient.downloadSubmission(submissionId, config.JWT, true)
req.pipe(outputStream)

Demo

const config = require('config')
const express = require('express')
const bodyParser = require('body-parser')
const fileUpload = require('express-fileupload')
const cors = require('cors')
const submissionApi = require('topcoder-submission-api-wrapper')
const client = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

// setup express app
const app = express()

app.use(cors())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(fileUpload())
app.set('port', process.env.TEST_PORT || 4000)

app.get('/proxy/download/:submissionId', function (req, res) {
  client
    .downloadSubmission(req.params.submissionId)
    .then(result => {
      res.set(result.headers)
      res.send(result.body)
    })
    .catch(err => {
      res.status(err.status).send(err.response.body)
    })
})

app.listen(app.get('port'), () => {
  console.info(`Express server listening on port ${app.get('port')}`)
})

Parameters

Name Type Description
submissionId String the submission id
jwt String the optional json web token
streamed Boolean the optional flag indicating whether or not to return a stream instead of a promise (default is promise)

Return type

Binary data

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json

createArtifact

createArtifact(submissionId, reqFormData[, jwt])

Create artifact for submission

Example

const path = require('path')
const fs = require('fs')
const fileData = fs.readFileSync(path.resolve(__dirname, './data/fileToUpload.zip'))
const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const submissionId = '8f4e8b6a-0ad2-4ff6-ab19-afeb102ff3b4'
const reqFormData = {
  artifact: {
    name: 'fileToUpload.zip',
    data: fileData // a Buffer contain file content
  },
  typeId: 'c56a4180-65aa-42ec-a945-5fd21dec0503'
}

// Promise model
submissionApiM2MClient
  .createArtifact(submissionId, reqFormData)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .createArtifact(submissionId, reqFormData)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .createArtifact(submissionId, reqFormData, config.JWT)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.createArtifact(submissionId, reqFormData)

await submissionApiUserCredentialsClient.createArtifact(submissionId, reqFormData)

await submissionApiJwtMethodArgClient.createArtifact(submissionId, reqFormData, config.JWT)

Demo

const config = require('config')
const express = require('express')
const bodyParser = require('body-parser')
const fileUpload = require('express-fileupload')
const cors = require('cors')
const submissionApi = require('topcoder-submission-api-wrapper')
const client = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

// setup express app
const app = express()

app.use(cors())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(fileUpload())
app.set('port', process.env.TEST_PORT || 4000)

app.post('/proxy/submission/:submissionId/artifact', function (req, res) {
  let formData = req.body
  if (req.files && req.files.artifact) {
    formData.artifact = req.files.artifact
  }
  client
    .createArtifact(req.params.submissionId, formData)
    .then(result => {
      res.send(result.body)
    })
    .catch(err => {
      res.status(err.status).send(err.response.body)
    })
})

app.listen(app.get('port'), () => {
  console.info(`Express server listening on port ${app.get('port')}`)
})

Parameters

Name Type Description
submissionId String the submission id
reqFormData ArtifactData the artifact
jwt String the optional json web token

Return type

Artifact

Authorization

Bearer

HTTP request headers

  • Content-Type: multipart/form-data
  • Accept: application/json

listArtifacts

listArtifacts(submissionId[, jwt])

List artifacts of specified submission

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const submissionId = '8f4e8b6a-0ad2-4ff6-ab19-afeb102ff3b4'

// Promise model
submissionApiM2MClient
  .listArtifacts(submissionId)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .listArtifacts(submissionId)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .listArtifacts(submissionId, config.JWT)
  .then(result => console.log(result.body, result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.listArtifacts(submissionId)

await submissionApiUserCredentialsClient.listArtifacts(submissionId)

await submissionApiJwtMethodArgClient.listArtifacts(submissionId, config.JWT)

Parameters

Name Type Description
submissionId String the submission id
jwt String the optional json web token

Return type

ListArtifactsData

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json

downloadArtifact

downloadArtifact(submissionId, artifactId[, jwt])

Download artifact using submission id and artifact id.

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const submissionId = '8f4e8b6a-0ad2-4ff6-ab19-afeb102ff3b4'
const artifactId = 'c56a4180-65aa-42ec-a945-5fd21dec0503'

// Promise model
submissionApiM2MClient
  .downloadArtifact(submissionId, artifactId)
  .then(result => console.log(result.status, result.body))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .downloadArtifact(submissionId, artifactId)
  .then(result => console.log(result.status, result.body))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .downloadArtifact(submissionId, artifactId, config.JWT)
  .then(result => console.log(result.status, result.body))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.downloadArtifact(submissionId, artifactId)

await submissionApiUserCredentialsClient.downloadArtifact(submissionId, artifactId)

await submissionApiJwtMethodArgClient.downloadArtifact(submissionId, artifactId, config.JWT)

// Stream Model
const outputStream = fs.createWriteStream(filePath)
const req = await submissionApiM2MClient.downloadArtifact(submissionId, artifactId, null, true)
req.pipe(outputStream)

const outputStream = fs.createWriteStream(filePath)
const req = await submissionApiUserCredentialsClient.downloadArtifact(submissionId, artifactId, null, true)
req.pipe(outputStream)

const outputStream = fs.createWriteStream(filePath)
const req = await submissionApiJwtMethodArgClient.downloadArtifact(submissionId, artifactId, config.JWT, true)
req.pipe(outputStream)

Demo

const config = require('config')
const express = require('express')
const bodyParser = require('body-parser')
const fileUpload = require('express-fileupload')
const cors = require('cors')
const submissionApi = require('topcoder-submission-api-wrapper')
const client = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

// setup express app
const app = express()

app.use(cors())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(fileUpload())
app.set('port', process.env.TEST_PORT || 4000)

app.get('/proxy/submission/:submissionId/artifact/:artifactId', function (req, res) {
  client
    .downloadArtifact(req.params.submissionId, req.params.artifactId)
    .then(result => {
      res.set(result.headers)
      res.send(result.body)
    })
    .catch(err => {
      res.status(err.status).send(err.response.body)
    })
})

app.listen(app.get('port'), () => {
  console.info(`Express server listening on port ${app.get('port')}`)
})

Parameters

Name Type Description
submissionId String the submission id
artifactId String the artifact id
jwt String the optional json web token
streamed Boolean the optional flag indicating whether or not to return a stream instead of a promise (default is a promise)

Return type

Binary data

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json

deleteArtifact

deleteArtifact(submissionId, artifactId[, jwt])

Delete artifact using submission id and artifact id.

Example

const submissionApi = require('topcoder-submission-api-wrapper')
const submissionApiM2MClient = submissionApi(_.pick(config,
      ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME',
        'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'SUBMISSION_API_URL',
        'AUTH0_PROXY_SERVER_URL']))

const submissionApiUserCredentialsClient = submissionApi(_.pick(config,
      ['USERNAME', 'PASSWORD', 'TC_AUTHN_URL', 'TC_AUTHZ_URL', 'TC_CLIENT_ID',
       'TC_CLIENT_V2_CONNECTION', 'SUBMISSION_API_URL']))

const submissionApiJwtMethodArgClient = submissionApi(_.pick(config, 'SUBMISSION_API_URL'))

const submissionId = '8f4e8b6a-0ad2-4ff6-ab19-afeb102ff3b4'
const artifactId = 'c56a4180-65aa-42ec-a945-5fd21dec0503'

// Promise model
submissionApiM2MClient
  .deleteArtifact(submissionId, artifactId)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

submissionApiUserCredentialsClient
  .deleteArtifact(submissionId, artifactId)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

submissionApiJwtMethodArgClient
  .deleteArtifact(submissionId, artifactId, config.JWT)
  .then(result => console.log(result.status))
  .catch(err => console.log(err))

// Async / await model
await submissionApiM2MClient.deleteSubmission(submissionId, artifactId)

await submissionApiUserCredentialsClient.deleteSubmission(submissionId, artifactId)

await submissionApiJwtMethodArgClient.deleteSubmission(submissionId, artifactId, config.JWT)

Parameters

Name Type Description
submissionId String the submission id
artifactId String the artifact id
jwt String the optional json web token

Return type

null (empty response body)

Authorization

Bearer

HTTP request headers

  • Content-Type: application/json
  • Accept: application/json