File size: 1,241 Bytes
0240df9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const express = require('express');
const router = express.Router();

const { v4: uuidv4 } = require('uuid');
const { generatePkcePair, queryAuthPoll } = require('../tool/cursorLogin.js');

router.get("/loginDeepControl", async (req, res) => {
  let bearerToken = req.headers.authorization?.replace('Bearer ', '');
  const { verifier, challenge } = generatePkcePair();
  const uuid = uuidv4();
  const resposne = await fetch("https://www.cursor.com/api/auth/loginDeepCallbackControl", {
    method: 'POST',
    headers: {
      "Accept": "*/*",
      'Content-Type': 'application/json',
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.6834.210 Safari/537.36',
      'Cookie': `WorkosCursorSessionToken=${bearerToken}`
    },
    body: JSON.stringify({
      "uuid": uuid,
      "challenge": challenge
    })
  })

  const retryAttempts = 20
  for (let i = 0; i < retryAttempts; i++) {
    const data = await queryAuthPoll(uuid, verifier);
    if (data) {
      return res.json(data)
    }
    await new Promise(resolve => setTimeout(resolve, 1000));
  }

  return res.status(500).json({
    error: 'Get cookie timeout, please try again.',
  });
})

module.exports = router;