UNPKG

7.68 kBSource Map (JSON)View Raw
1{"version":3,"file":"nodeHttpExecutor.js","sourceRoot":"","sources":["../src/nodeHttpExecutor.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAyEA,AAAmB;;oEACnB,AAAK;AACH,YAAI,AAAI,OAAG,AAAE;AACb,YAAI,AAAC;AACH,AAAI,mBAAG,MAAM,AAAQ,8CAAC,AAAI,MAAC,AAAI,KAAC,AAAO,AAAE,oCAAE,AAAQ,AAAC,WAAE,AAAO,AAAC,AAChE;AAAC,UACD,AAAK,AAAC,OAAC,AAAO,AAAC,SAAC,AAAC;AACf,AAAM,mBAAC,AAAI,AACb;AAAC;AAED,AAAE,AAAC,YAAC,CAAC,AAAI,AAAC,MAAC,AAAC;AACV,AAAM,mBAAC,AAAI,AACb;AAAC;AAED,YAAI,AAAC;AACH,kBAAM,AAAM,SAAG,AAAQ,iCAAC,AAAI,AAAC;AAC7B,AAAM,mBAAC,AAAM,OAAC,AAAa,AAAC,kBAAI,AAAM,OAAC,AAAK,AAC9C;AAAC,UACD,AAAK,AAAC,OAAC,AAAC,AAAC,GAAC,AAAC;AACT,AAAwD;AACxD,AAAO,oBAAC,AAAI,KAAC,AAAC,AAAC;AACf,AAAM,mBAAC,AAAI,AACb;AAAC,AACH;AAAC;;;;;;AAED,AAAiB;;;;qEACjB,AAAK;AACH,YAAI,AAAW,cAAG,AAAO,QAAC,AAAG,IAAC,AAAsB,0BAAI,AAAO,QAAC,AAAG,IAAC,AAAW,eAAI,AAAO,QAAC,AAAG,IAAC,AAAW,eAAI,AAAO,QAAC,AAAG,IAAC,AAAgB;AAC1I,AAAE,AAAC,YAAC,CAAC,AAAW,AAAC,aAAC,AAAC;AACjB,AAAW,0BAAG,MAAM,AAAY,AAAE;AAClC,AAAE,AAAC,gBAAC,CAAC,AAAW,AAAC,aAAC,AAAC;AACjB,AAAM,uBAAC,AAAI,AACb;AAAC,AACH;AAAC;AAED,cAAM,AAAK,QAAG,AAAQ,iCAAC,AAAW,AAAC;AAEnC,cAAM,AAAa,gBAAG,AAAK,MAAC,AAAQ,aAAK,AAAQ,WAAG,AAAO,UAAG,AAAM;AACpE,AAAM,uBAAS,AAAc,AAAC,AAAC,4BAAY,AAAa,aAAE,AAAC;AACzD,AAAK;AACH,AAAI,sBAAE,AAAK,MAAC,AAAI,AAAI,SAAC,AAAa,kBAAK,AAAO,UAAG,AAAG,MAAG,AAAE,AAAC;AAC1D,AAAI,sBAAE,AAAK,MAAC,AAAQ;AACpB,AAAS,2BAAE,AAAK,MAAC,AAAI,AACtB,AACF,AAAC,AACJ;AANW;AADmD,SAArD,AAAO;AAOf;;;;;;;;;;;AAtHD,AAAO,AAAM,AAAM,AAAO;;;;;;AAC1B,AAAO,AAAE,AAAiB,AAAE,AAAuB,AAAmB,AAAY,AAAE,AAAM,AAAuB;;;;;;AACjH,AAAO,AAAE,AAAS,AAAE,AAAQ,AAAE,AAAM,AAAY;;;;;;AAChD,AAAO,AAAyC,AAAO,AAAI,AAAQ,AAAkB,AAAM,AAAM;;;;;;AACjG,AAAO,AAAK,AAAK,AAAM,AAAO;;;;;;AAC9B,AAAO,AAAE,AAAK,AAAI,AAAQ,AAAE,AAAM,AAAK;;;;;;AACvC,AAAO,AAAE,AAAO,AAAE,AAAM,AAAI;;;;AAC5B,AAAO,AAAK,AAAI,AAAM,AAAM;;;;AAC5B,AAAO,AAAE,AAAK,AAAI,AAAQ,AAAE,AAAM,AAAK;;;;;;AACvC,AAAO,AAAE,AAAiB,AAAE,AAAM,AAAQ;;;;;;;;AAE1C,MAAM,AAAK,QAAG,AAAM,wCAAC,AAAkB,AAAC,AAExC,AAAM;MAAwB,AAAQ,AAA2B;AAGzD,AAAQ,YAAd,AAAK,CAAU,AAAW,KAAE,AAAmB;;;YAAE,8EAA2B,EAAC,AAAiB,mBAAE,AAAI,AAAiB,AAAE,AAAC;;AACtH,AAAE,AAAC,gBAAC,CAAC,AAAO,QAAC,AAAe,AAAC,iBAAC,AAAC;AAC7B,sBAAM,AAAS,+CAAC,AAAI,MAAC,AAAO,QAAC,AAAW,AAAC,AAAC,AAC5C;AAAC;AAED,AAAE,AAAC,gBAAC,AAAI,MAAC,AAAiB,qBAAI,AAAI,AAAC,MAAC,AAAC;AACnC,AAAI,sBAAC,AAAiB,oBAAG,AAAW,AAAE,AACxC;AAAC;AAED,kBAAM,AAAK,QAAG,MAAM,AAAI,MAAC,AAAiB;AAC1C,AAAM,mBAAC,cAAc,AAAiB,kBAAC,AAAa,cAAS,UAAC,AAAO,SAAE,AAAM,QAAE,AAAQ;AACrF,sBAAM,AAAS,YAAG,AAAQ,iCAAC,AAAG,AAAC;AAC/B,AAAI,sBAAC,AAAU;AACb,AAAQ,8BAAE,AAAS,UAAC,AAAQ;AAC5B,AAAI,0BAAE,AAAS,UAAC,AAAI;AACpB,AAAO,6BAAE,AAAO,QAAC,AAAO,WAAI,AAAS;AACrC,AAAK,AACN,AAAC;AALsC,iBAAxB,AAAuB,GAKnC,AAAW,aAAE,AAAC,GAAE,AAAO,SAAE,UAAC,AAAY;AACxC,AAAE,AAAC,wBAAC,AAAK,SAAI,AAAI,AAAC,MAAC,AAAC;AAClB,AAAO,gCAAC,AAAW,AAAC,AACtB;AAAC,AACD,AAAI,2BAAC,AAAC;AACJ,AAAM,+BAAC,AAAK,AAAC,AACf;AAAC,AACH;AAAC,mBAAE,AAAQ,AAAC,AACd;AAAC,AAAC,AACJ,aAhBe,AAAO;;AAgBrB;AAED,AAAY,iBAAI,AAAuB,SAAE,AAAoC,mBAAE,AAAkF;YAAE,oFAAwB,AAAC;;AAC1L,AAAE,AAAC,YAAC,AAAK,MAAC,AAAO,AAAC,SAAC,AAAC;AAClB,AAAK,AAAC,oCAAkB,AAAiB,+CAAC,AAAO,AAAC,QAAE,AAAC,AACvD;AAAC;AAED,AAAM,iCAAmB,AAAa,cAAC,CAAC,AAAO,SAAE,AAAM,QAAE,AAAQ;AAC/D,kBAAM,AAAO,WAAI,AAAO,QAAC,AAAQ,aAAK,AAAO,AAAG,AAAQ,4CAAG,AAAK,0BAAC,AAAO,AAAC,SAAC,AAAO,SAAG,AAAyB,QAA1B;AACjF,oBAAI,AAAC;AACH,AAAI,yBAAC,AAAc,eAAC,AAAQ,UAAE,AAAO,SAAE,AAAiB,mBAAE,AAAO,SAAE,AAAM,QAAE,AAAa,eAAE,AAAgB,AAAC,AAC7G;AAAC,kBACD,AAAK,AAAC,OAAC,AAAC,AAAC,GAAC,AAAC;AACT,AAAM,2BAAC,AAAC,AAAC,AACX;AAAC,AACH;AAAC,AAAC,aAPc;AAShB,AAAI,iBAAC,AAAiB,kBAAC,AAAO,SAAE,AAAM,AAAC;AACvC,AAAO,oBAAC,AAAE,GAAC,AAAO,SAAE,AAAM,AAAC;AAC3B,AAAgB,6BAAC,AAAO,SAAE,AAAM,AAAC;AACjC,AAAQ,qBAAC,MAAM,AAAO,QAAC,AAAK,AAAE,AAAC,AACjC;AAAC,AAAC,AACJ,SAfS,AAAiB;AAezB;AAES,AAAS,cAAC,AAAY,SAAE,AAAiC;AACjE,AAAM,eAAC,AAAK,0BAAC,AAAO,QAAC,AAAO,SAAE,AAAQ,AAAC,AACzC;AAAC,AACF,AAED,AAAM;;;AAAC,MAAM,AAAY,sCAAqB,IAAI,AAAgB,AAAE","sourcesContent":["import _debug from \"debug\"\nimport { CancellationToken, configureRequestOptions, DownloadOptions, HttpExecutor } from \"electron-builder-http\"\nimport { ensureDir, readFile } from \"fs-extra-p\"\nimport { Agent, ClientRequest, IncomingMessage, request as _request, RequestOptions } from \"http\"\nimport * as https from \"https\"\nimport { parse as parseIni } from \"ini\"\nimport { homedir } from \"os\"\nimport * as path from \"path\"\nimport { parse as parseUrl } from \"url\"\nimport { safeStringifyJson } from \"./util\"\n\nconst debug = _debug(\"electron-builder\")\n\nexport class NodeHttpExecutor extends HttpExecutor<ClientRequest> {\n private httpsAgentPromise: Promise<Agent> | null\n\n async download(url: string, destination: string, options: DownloadOptions = {cancellationToken: new CancellationToken()}): Promise<string> {\n if (!options.skipDirCreation) {\n await ensureDir(path.dirname(destination))\n }\n\n if (this.httpsAgentPromise == null) {\n this.httpsAgentPromise = createAgent()\n }\n\n const agent = await this.httpsAgentPromise\n return await options.cancellationToken.createPromise<string>((resolve, reject, onCancel) => {\n const parsedUrl = parseUrl(url)\n this.doDownload(configureRequestOptions({\n hostname: parsedUrl.hostname,\n path: parsedUrl.path,\n headers: options.headers || undefined,\n agent,\n }), destination, 0, options, (error: Error) => {\n if (error == null) {\n resolve(destination)\n }\n else {\n reject(error)\n }\n }, onCancel)\n })\n }\n\n doApiRequest<T>(options: RequestOptions, cancellationToken: CancellationToken, requestProcessor: (request: ClientRequest, reject: (error: Error) => void) => void, redirectCount: number = 0): Promise<T> {\n if (debug.enabled) {\n debug(`HTTPS request: ${safeStringifyJson(options)}`)\n }\n\n return cancellationToken.createPromise((resolve, reject, onCancel) => {\n const request = (options.protocol === \"http:\" ? _request : https.request)(options, (response: IncomingMessage) => {\n try {\n this.handleResponse(response, options, cancellationToken, resolve, reject, redirectCount, requestProcessor)\n }\n catch (e) {\n reject(e)\n }\n })\n\n this.addTimeOutHandler(request, reject)\n request.on(\"error\", reject)\n requestProcessor(request, reject)\n onCancel(() => request.abort())\n })\n }\n\n protected doRequest(options: any, callback: (response: any) => void): any {\n return https.request(options, callback)\n }\n}\n\nexport const httpExecutor: NodeHttpExecutor = new NodeHttpExecutor()\n\n// only https proxy\nasync function proxyFromNpm() {\n let data = \"\"\n try {\n data = await readFile(path.join(homedir(), \".npmrc\"), \"utf-8\")\n }\n catch (ignored) {\n return null\n }\n\n if (!data) {\n return null\n }\n\n try {\n const config = parseIni(data)\n return config[\"https-proxy\"] || config.proxy\n }\n catch (e) {\n // used in nsis auto-updater, do not use .util.warn here\n console.warn(e)\n return null\n }\n}\n\n// only https url\nasync function createAgent() {\n let proxyString = process.env.npm_config_https_proxy || process.env.HTTPS_PROXY || process.env.https_proxy || process.env.npm_config_proxy\n if (!proxyString) {\n proxyString = await proxyFromNpm()\n if (!proxyString) {\n return null\n }\n }\n\n const proxy = parseUrl(proxyString)\n\n const proxyProtocol = proxy.protocol === \"https:\" ? \"Https\" : \"Http\"\n return require(\"tunnel-agent\")[`httpsOver${proxyProtocol}`]({\n proxy: {\n port: proxy.port || (proxyProtocol === \"Https\" ? 443 : 80),\n host: proxy.hostname,\n proxyAuth: proxy.auth\n }\n })\n}"]}