const is_pr_closed = function()

in preview/clean.js [98:173]


  const is_pr_closed = function (pr) {
    console.info(`Checking status of https://github.com/elastic/${pr.repo}/pull/${pr.number}`);
    return new Promise((resolve, reject) => {
      const body = {
        query: `
          query PRClosed($repo: String!, $number: Int!) {
            repository(owner:\"elastic\", name:$repo) {
              pullRequest(number:$number) {
                closed
              }
            }
          }
        `,
        variables: {
          repo: pr.repo,
          number: pr.number,
        },
      };
      const postData = JSON.stringify(body);
      const req = https.request({
        method: 'POST',
        host: 'api.github.com',
        path: '/graphql',
        headers: {
          'Authorization': `bearer ${token}`,
          'Content-Type': 'application/json',
          'Content-Length': Buffer.byteLength(postData),
          'User-Agent': 'Elastic Docs Preview Cleaner Upper',
        }
      }, res => {
        let data = '';
        res.on('data', chunk => {
          data += chunk;
        });
        res.on('end', () => {
          if (res.statusCode !== 200) {
            reject(`Error getting ${JSON.stringify(pr)} [${res.statusCode}]:\n${data}`);
          } else {
            let closed;
            try {
              const parsed = JSON.parse(data);
              const repo = parsed.data.repository;
              if (repo) {
                closed = repo.pullRequest.closed;
              } else {
                console.warn(pr.branch,
                  "looks like a PR but isn't for a repo we manage so we assume",
                  'it is open');
                closed = false;
              }
            } catch (e) {
              reject(e);
              return;
            }
            if (closed === undefined) {
              reject(`unexpected reply from github:${data}`);
              return;
            }
            if (res.headers['x-ratelimit-remaining'] < 100) {
              const until = res.headers['x-ratelimit-reset'];
              const millis = until * 1000 - Date.now().getTime();
              console.info('Rate limited for', millis, 'milliseconds');
              setTimeout(() => resolve(closed), millis);
            } else {
              resolve(closed);
            }
          }
        });
      });
      req.on('error', err => {
        reject(`Error getting ${JSON.stringify(pr)}:\n${err}`);
      });
      req.write(postData);
      req.end();
    });
  }