#!/usr/bin/env node const yargs = require('yargs/yargs') const { hideBin } = require('yargs/helpers') const { LogActions } = require('../src/githubActions.js') const { request } = require('../src/httpClient'); const argv = yargs(hideBin(process.argv)) .option('data', { alias: 'd', type: 'string', description: 'request body data', default: '{}' }) .option('files', { alias: 'f', type: 'string', description: 'request files, send as multipart/form-data', default: '{}' }) .option('file', { type: 'string', description: 'single file, send as application/octet-stream' }) .option('customHeaders', { alias: 'h', type: 'string', description: 'custom request headers', default: '{}' }) .option('method', { alias: 'm', type: 'string', description: 'request method (GET, POST, PATCH, PUT, DELETE)', default: 'POST' }) .option('contentType', { alias: 't', type: 'string', description: 'request content type', default: 'application/json' }) .option('bearerToken', { type: 'string', description: 'bearer token without Bearer prefix, added as Authorization header' }) .option('timeout', { type: 'number', description: 'request timeout', default: 5000 }) .positional('url', { type: 'string', description: 'URL', description: 'request URL' }) .parse() let customHeaders = {} if (!!argv.customHeaders) { try { customHeaders = JSON.parse(argv.customHeaders); } catch(error) { console.error('Could not parse customHeaders string value') } } const headers = { 'Content-Type': argv.contentType || 'application/json' } if (!!argv.bearerToken) { headers['Authorization'] = `Bearer ${argv.bearerToken}`; } const instanceConfig = { baseURL: argv._[0], timeout: parseInt(argv.timeout || 5000, 10), headers: { ...headers, ...customHeaders } } request({ data: argv.data, method: argv.method, instanceConfig, files: argv.files, file: argv.file, actions: new LogActions(), options: { ignoredCodes: [], escapeData: false, preventFailureOnNoResponse: false, retry: 0, retryWait: 0 } })