{"version":3,"file":"submitSync.js","sourceRoot":"/source/","sources":["submitSync.ts"],"names":[],"mappings":"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","sourcesContent":["import * as events from \"events\";\nimport * as net from \"net\";\nimport * as stream from \"stream\";\nimport * as child from \"child_process\";\nimport * as tls from \"tls\";\nimport * as http from \"http\";\nimport * as crypto from \"crypto\";\nimport https = require('https');\nimport url = require('url');\nimport { StringDecoder } from 'string_decoder';\nexport interface SubmissionCallback {\n  (status: number, message: string, data?: string, headers?: Object): void;\n}\n\nexport interface SubmissionRequest {\n  apiKey: string;\n  userAgent: string;\n  method: string;\n  url: string;\n  data: string;\n}\n\n                                                                                                                   \n\nexport interface ISubmissionAdapter {\n  sendRequest(request: SubmissionRequest, callback?: SubmissionCallback, isAppExiting?: boolean): void;\n}\n\n                                                                                                                                                                                                                                                                                                                     \n\nexport class NodeSubmissionAdapter implements ISubmissionAdapter {\n  public sendRequest(request: SubmissionRequest, callback?: SubmissionCallback, isAppExiting?: boolean) {\n    if (isAppExiting) {\n      this.sendRequestSync(request, callback);\n      return;\n    }\n\n    let parsedHost = url.parse(request.url);\n\n    let options: https.RequestOptions = {\n      auth: `client:${request.apiKey}`,\n      headers: {},\n      hostname: parsedHost.hostname,\n      method: request.method,\n      port: parsedHost.port && parseInt(parsedHost.port, 10),\n      path: request.url\n    };\n\n    options.headers['User-Agent'] = request.userAgent;\n\n    if (request.method === 'POST') {\n      options.headers = {\n        'Content-Type': 'application/json',\n        'Content-Length': Buffer.byteLength(request.data)\n      };\n    }\n\n    let protocol = (parsedHost.protocol === 'https' ? https : http);\n    let clientRequest: http.ClientRequest = protocol.request(options, (response: http.IncomingMessage) => {\n      let body = '';\n      response.setEncoding('utf8');\n      response.on('data', (chunk) => body += chunk);\n      response.on('end', () => this.complete(response, body, response.headers, callback));\n    });\n\n    clientRequest.on('error', (error: Error) => callback && callback(500, error.message));\n    clientRequest.end(request.data);\n  }\n\n  private complete(response: http.IncomingMessage, responseBody: string, responseHeaders: Object, callback: SubmissionCallback): void {\n    let message: string;\n    if (response.statusCode === 0) {\n      message = 'Unable to connect to server.';\n    } else if (response.statusCode < 200 || response.statusCode > 299) {\n      message = response.statusMessage || (<any>response).message;\n    }\n\n    callback && callback(response.statusCode || 500, message, responseBody, responseHeaders);\n  }\n\n  private sendRequestSync(request: SubmissionRequest, callback: SubmissionCallback): void {\n    let requestJson = JSON.stringify(request);\n    let res = child.spawnSync(process.execPath, [require.resolve('./submitSync.js')],\n      {\n        input: requestJson,\n        stdio: ['pipe', 'pipe', process.stderr]\n      });\n\n    let out = res.stdout.toString();\n    let result = JSON.parse(out);\n\n    callback && callback(result.status, result.message, result.data, result.headers);\n  }\n}\n\n                                                                                                                                                                                                                                  \n\nlet decoder = new StringDecoder('utf8');\nlet strings: string[] = [];\n\nlet jsonStream = new stream.Writable();\njsonStream._write = (chunk: Buffer | string, encoding: string, next: Function) => {\n  strings.push(decoder.write(<Buffer>chunk));\n  next();\n};\n\njsonStream.on('finish', () => {\n  let json = strings.join('');\n  let request: SubmissionRequest = JSON.parse(json);\n  let adapter = new NodeSubmissionAdapter();\n  adapter.sendRequest(request, (status, message, data, headers) => {\n    let result = {\n      status,\n      message,\n      data,\n      headers\n    };\n    process.stdout.write(JSON.stringify(result));\n    process.exit(0);\n  });\n});\n\nprocess.stdin.pipe(jsonStream);\n\n"]}