备份: 完整开发状态(含反混淆脚本和临时文件)
This commit is contained in:
645
deobfuscated_full/extension/deobfuscated.js
Normal file
645
deobfuscated_full/extension/deobfuscated.js
Normal file
@@ -0,0 +1,645 @@
|
||||
var vip = "cursor";
|
||||
"use strict";
|
||||
const _0x50c5e9 = _0xc90d;
|
||||
(function (_0x50742e, _0x20898a, _0x2418ea, _0x355fa7, _0x2854a8, _0x1c8342, _0x14e99b) {
|
||||
_0x50742e = _0x50742e >> 8;
|
||||
_0x1c8342 = "hs";
|
||||
_0x14e99b = "hs";
|
||||
return function (_0x344acc, _0x599ec2, _0x666328, _0x2382a3, _0x3ab041) {
|
||||
const _0x3c66f5 = _0xc90d;
|
||||
_0x2382a3 = "tfi";
|
||||
_0x1c8342 = _0x2382a3 + _0x1c8342;
|
||||
_0x3ab041 = "up";
|
||||
_0x14e99b += _0x3ab041;
|
||||
_0x1c8342 = _0x666328(_0x1c8342);
|
||||
_0x14e99b = _0x666328(_0x14e99b);
|
||||
_0x666328 = 0;
|
||||
const _0x3f6fa7 = _0x344acc();
|
||||
while (true && --_0x355fa7 + _0x599ec2) {
|
||||
try {
|
||||
_0x2382a3 = -parseInt(_0x3c66f5(699, "6eKA")) / 1 + parseInt(_0x3c66f5(506, "ulOo")) / 2 * (parseInt(_0x3c66f5(494, "^eXX")) / 3) + parseInt(_0x3c66f5(574, "%1FA")) / 4 * (-parseInt(_0x3c66f5(537, "C90F")) / 5) + -parseInt(_0x3c66f5(538, "eMU)")) / 6 + -parseInt(_0x3c66f5(576, "x^&^")) / 7 + -parseInt(_0x3c66f5(641, "3pMS")) / 8 + -parseInt(_0x3c66f5(741, "gNA]")) / 9 * (-parseInt(_0x3c66f5(725, "6eKA")) / 10);
|
||||
} catch (_0x57f5a9) {
|
||||
_0x2382a3 = _0x666328;
|
||||
} finally {
|
||||
_0x3ab041 = _0x3f6fa7[_0x1c8342]();
|
||||
if (_0x50742e <= _0x355fa7) {
|
||||
if (_0x666328) {
|
||||
if (_0x2854a8) {
|
||||
_0x2382a3 = _0x3ab041;
|
||||
} else {
|
||||
_0x2854a8 = _0x3ab041;
|
||||
}
|
||||
} else {
|
||||
_0x666328 = _0x3ab041;
|
||||
}
|
||||
} else if (_0x666328 == _0x2854a8.replace(/[fmNibthVyFCJeMDPdERYTjOv=]/g, "")) {
|
||||
if (_0x2382a3 === _0x599ec2) {
|
||||
_0x3f6fa7["un" + _0x1c8342](_0x3ab041);
|
||||
break;
|
||||
}
|
||||
_0x3f6fa7[_0x14e99b](_0x3ab041);
|
||||
}
|
||||
}
|
||||
}
|
||||
}(_0x2418ea, _0x20898a, function (_0x4952f1, _0x9669f4, _0x30488d, _0x244dc2, _0x1eb8bf, _0x573861, _0x62cd61) {
|
||||
_0x9669f4 = "split";
|
||||
_0x4952f1 = arguments[0];
|
||||
_0x4952f1 = _0x4952f1[_0x9669f4]("");
|
||||
_0x30488d = "reverse";
|
||||
_0x4952f1 = _0x4952f1[_0x30488d]("v");
|
||||
_0x244dc2 = "join";
|
||||
1855060;
|
||||
return _0x4952f1[_0x244dc2]("");
|
||||
});
|
||||
})(49408, 323864, _0x2b0b, 195);
|
||||
if (_0x2b0b) {
|
||||
vip = "cursor";
|
||||
}
|
||||
var __createBinding = this && this.__createBinding || (Object[_0x50c5e9(709, "9%gg")] ? function (_0x185241, _0xadd91c, _0x5d998c, _0x5c5f1b) {
|
||||
const _0x1d0b17 = _0x50c5e9;
|
||||
const _0x5bb81a = {
|
||||
qLYXn: "statusBarItem.warningBackground",
|
||||
oCktg: function (_0x584b44, _0x22c656) {
|
||||
return _0x584b44 !== _0x22c656;
|
||||
},
|
||||
lIjES: _0x1d0b17(493, "6eKA"),
|
||||
bolQp: function (_0xda5b33, _0x53ee50) {
|
||||
return _0xda5b33 === _0x53ee50;
|
||||
},
|
||||
aUyeK: function (_0x5e4739, _0x41abec) {
|
||||
return _0x5e4739 in _0x41abec;
|
||||
},
|
||||
WPdYT: _0x1d0b17(497, "3R#@")
|
||||
};
|
||||
if (_0x5bb81a[_0x1d0b17(687, "yZiB")](_0x5c5f1b, undefined)) {
|
||||
_0x5c5f1b = _0x5d998c;
|
||||
}
|
||||
var _0x3f9801 = Object.getOwnPropertyDescriptor(_0xadd91c, _0x5d998c);
|
||||
if (!_0x3f9801 || (_0x5bb81a[_0x1d0b17(619, "Z$cp")](_0x1d0b17(664, "vr(f"), _0x3f9801) ? !_0xadd91c[_0x1d0b17(623, "xnwD")] : _0x3f9801[_0x1d0b17(734, "VEk@")] || _0x3f9801[_0x1d0b17(676, "Qug0")])) {
|
||||
if (_0x5bb81a[_0x1d0b17(583, "M#fX")] !== _0x5bb81a[_0x1d0b17(648, "Joy3")]) {
|
||||
_0x50aad3[_0x1d0b17(673, "KB2N")] = new _0xe1124e[_0x1d0b17(701, "0TA6")](_0x5bb81a[_0x1d0b17(559, "]xb5")]);
|
||||
_0x3ef34e[_0x1d0b17(629, "^eXX")] = _0x590e71;
|
||||
} else {
|
||||
_0x3f9801 = {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
const _0x232585 = _0x1d0b17;
|
||||
const _0x51444c = {
|
||||
VeJHc: _0x232585(588, "%1FA")
|
||||
};
|
||||
if (_0x5bb81a.oCktg("REzFB", _0x5bb81a[_0x232585(534, "%1FA")])) {
|
||||
return _0xadd91c[_0x5d998c];
|
||||
} else {
|
||||
_0x4b0079.backgroundColor = _0x52c66f;
|
||||
_0x1920da[_0x232585(661, "6eKA")] = _0x51444c[_0x232585(495, "cfb]")];
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Object[_0x1d0b17(628, "x^&^")](_0x185241, _0x5c5f1b, _0x3f9801);
|
||||
} : function (_0x4e0403, _0x5dbc69, _0x1333ee, _0x2fe15d = _0x1333ee) {
|
||||
_0x4e0403[_0x2fe15d] = _0x5dbc69[_0x1333ee];
|
||||
});
|
||||
var __setModuleDefault = this && this.__setModuleDefault || (Object[_0x50c5e9(651, "ulOo")] ? function (_0x332e56, _0x5bd938) {
|
||||
const _0x5b01b1 = _0x50c5e9;
|
||||
const _0x5672bf = {
|
||||
EWSDJ: "default"
|
||||
};
|
||||
Object[_0x5b01b1(518, "xnwD")](_0x332e56, _0x5672bf[_0x5b01b1(472, "xnwD")], {
|
||||
enumerable: true,
|
||||
value: _0x5bd938
|
||||
});
|
||||
} : function (_0x2b8a88, _0x4a5703) {
|
||||
const _0x5d04f2 = _0x50c5e9;
|
||||
_0x2b8a88[_0x5d04f2(632, "x^&^")] = _0x4a5703;
|
||||
});
|
||||
var __importStar = this && this.__importStar || function () {
|
||||
const _0x537baa = _0x50c5e9;
|
||||
const _0x13cc2d = {
|
||||
tjYJn: _0x537baa(532, "3pMS"),
|
||||
QYEVx: function (_0x2c7174, _0x55ce91, _0xb62ba0) {
|
||||
return _0x2c7174(_0x55ce91, _0xb62ba0);
|
||||
},
|
||||
SHOhk: function (_0x5f3e24, _0x19454d) {
|
||||
return _0x5f3e24 != _0x19454d;
|
||||
},
|
||||
iaJCb: function (_0x23d849, _0x2744e5) {
|
||||
return _0x23d849(_0x2744e5);
|
||||
}
|
||||
};
|
||||
function _0x3259d5(_0x3958e4) {
|
||||
_0x3259d5 = Object.getOwnPropertyNames || function (_0x3129b4) {
|
||||
const _0x4188bc = _0xc90d;
|
||||
var _0x5958e3 = [];
|
||||
for (var _0x66cca2 in _0x3129b4) {
|
||||
if (Object[_0x4188bc(656, "0#oP")][_0x4188bc(682, "yQ[r")].call(_0x3129b4, _0x66cca2)) {
|
||||
_0x5958e3[_0x5958e3.length] = _0x66cca2;
|
||||
}
|
||||
}
|
||||
return _0x5958e3;
|
||||
};
|
||||
return _0x3259d5(_0x3958e4);
|
||||
}
|
||||
return function (_0x2dd93a) {
|
||||
const _0x1bbaad = _0x537baa;
|
||||
const _0x352bf8 = _0x13cc2d.tjYJn[_0x1bbaad(557, "x9zl")]("|");
|
||||
let _0x42b7c8 = 0;
|
||||
while (true) {
|
||||
switch (_0x352bf8[_0x42b7c8++]) {
|
||||
case "0":
|
||||
if (_0x2dd93a && _0x2dd93a[_0x1bbaad(584, "M#fX")]) {
|
||||
return _0x2dd93a;
|
||||
}
|
||||
continue;
|
||||
case "1":
|
||||
return _0x849928;
|
||||
case "2":
|
||||
var _0x849928 = {};
|
||||
continue;
|
||||
case "3":
|
||||
_0x13cc2d[_0x1bbaad(603, "8Y&g")](__setModuleDefault, _0x849928, _0x2dd93a);
|
||||
continue;
|
||||
case "4":
|
||||
if (_0x13cc2d[_0x1bbaad(528, "0mo&")](_0x2dd93a, null)) {
|
||||
for (var _0x31a730 = _0x13cc2d[_0x1bbaad(707, "7DUV")](_0x3259d5, _0x2dd93a), _0x14b55b = 0; _0x14b55b < _0x31a730[_0x1bbaad(512, "7DUV")]; _0x14b55b++) {
|
||||
if (_0x31a730[_0x14b55b] !== "default") {
|
||||
__createBinding(_0x849928, _0x2dd93a, _0x31a730[_0x14b55b]);
|
||||
}
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
}();
|
||||
Object[_0x50c5e9(568, "9%gg")](exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports[_0x50c5e9(736, "]bxB")] = undefined;
|
||||
exports[_0x50c5e9(533, "0TA6")] = log;
|
||||
exports[_0x50c5e9(694, "vr(f")] = activate;
|
||||
exports[_0x50c5e9(486, "0TA6")] = deactivate;
|
||||
exports[_0x50c5e9(733, "8Y&g")] = showStatusBar;
|
||||
exports.hideStatusBar = hideStatusBar;
|
||||
exports[_0x50c5e9(703, "8j^A")] = updateUsageStatusBar;
|
||||
const vscode = __importStar(require(_0x50c5e9(546, "8j^A")));
|
||||
const provider_1 = require(_0x50c5e9(515, "3pMS"));
|
||||
const fs = __importStar(require("fs"));
|
||||
const path = __importStar(require("path"));
|
||||
let usageStatusBarItem;
|
||||
exports[_0x50c5e9(570, "yZiB")] = vscode[_0x50c5e9(730, "eMU)")].createOutputChannel("CursorPro");
|
||||
function log(_0x158f08) {
|
||||
const _0x28c713 = _0x50c5e9;
|
||||
const _0x471eac = new Date().toLocaleTimeString();
|
||||
exports[_0x28c713(504, "W6ef")][_0x28c713(530, "VEk@")]("[" + _0x471eac + "] " + _0x158f08);
|
||||
console[_0x28c713(723, "6eKA")]("[CursorPro] " + _0x158f08);
|
||||
}
|
||||
function cleanServiceWorkerCache() {
|
||||
const _0x5f1520 = _0x50c5e9;
|
||||
const _0x5b2934 = {
|
||||
clWzj: _0x5f1520(726, "3R#@"),
|
||||
HzCMb: function (_0xf30434) {
|
||||
return _0xf30434();
|
||||
},
|
||||
zkEWD: _0x5f1520(715, "yZiB"),
|
||||
OrWfk: _0x5f1520(624, "]bxB"),
|
||||
KuMvW: _0x5f1520(541, "%1FA"),
|
||||
Axznb: _0x5f1520(517, "3pMS"),
|
||||
HVONi: _0x5f1520(634, "]D$Q"),
|
||||
sVifD: _0x5f1520(696, "0mo&"),
|
||||
VNShf: function (_0x30e828, _0x16b66e) {
|
||||
return _0x30e828 != _0x16b66e;
|
||||
},
|
||||
ySLXv: function (_0x2db2d5, _0x758ddf) {
|
||||
return _0x2db2d5 !== _0x758ddf;
|
||||
},
|
||||
uoVjL: function (_0x4e620b, _0x14aa3d, _0x14e0ea, _0x458dcd) {
|
||||
return _0x4e620b(_0x14aa3d, _0x14e0ea, _0x458dcd);
|
||||
},
|
||||
SDngL: function (_0x7ae099, _0x315e0c) {
|
||||
return _0x7ae099(_0x315e0c);
|
||||
},
|
||||
pzJmQ: _0x5f1520(636, "]bxB"),
|
||||
ejGJp: _0x5f1520(660, "p@*Y"),
|
||||
MkxFH: _0x5f1520(635, "%1FA"),
|
||||
FRMTS: "Caches",
|
||||
iEcMy: _0x5f1520(499, "vr(f"),
|
||||
QCPeO: function (_0x27c241, _0x53b80a) {
|
||||
return _0x27c241 === _0x53b80a;
|
||||
},
|
||||
SMSnH: _0x5f1520(547, "VEk@"),
|
||||
ordTH: function (_0x4e4dbb, _0x41ae5b) {
|
||||
return _0x4e4dbb === _0x41ae5b;
|
||||
},
|
||||
ksCsK: "GPUCache",
|
||||
QBTMK: ".cache",
|
||||
QuPXA: _0x5f1520(731, "0#oP"),
|
||||
NHMNI: _0x5f1520(695, "p@*Y"),
|
||||
cwNWw: _0x5f1520(737, "ulOo"),
|
||||
EsYdk: _0x5f1520(554, "Joy3"),
|
||||
CYPjA: "CacheStorage",
|
||||
RzjZf: _0x5f1520(761, "W6ef"),
|
||||
LVckZ: "Database",
|
||||
GwoBU: function (_0x679c95, _0x4a4c07) {
|
||||
return _0x679c95 !== _0x4a4c07;
|
||||
},
|
||||
egqbq: _0x5f1520(473, "Z$cp"),
|
||||
soqTH: "[CursorPro] Service Worker Database 已清理:",
|
||||
jAuJF: _0x5f1520(652, "9%gg"),
|
||||
jRkxW: _0x5f1520(744, "x9zl")
|
||||
};
|
||||
try {
|
||||
const _0x3a20d2 = process.platform;
|
||||
const _0x324847 = [];
|
||||
if (_0x5b2934[_0x5f1520(610, "p@*Y")](_0x3a20d2, _0x5b2934.SMSnH)) {
|
||||
if (_0x5b2934[_0x5f1520(585, "9%gg")](_0x5f1520(535, "yQ[r"), "bZnYB")) {
|
||||
_0x5b2934[_0x5f1520(516, "8Y&g")](_0x5bd024);
|
||||
const _0x3785d4 = new _0xc1b846[_0x5f1520(521, "Fz9]")](_0x427344[_0x5f1520(490, "Qug0")], _0x5738ca);
|
||||
_0x2de043[_0x5f1520(613, "xnwD")].push(_0x12dbf2.window.registerWebviewViewProvider(_0x5b2934[_0x5f1520(573, "Z$cp")], _0x3785d4));
|
||||
_0x5c05ac = _0x368863[_0x5f1520(626, "yZiB")].createStatusBarItem(_0x2b4857.StatusBarAlignment.Right, 100);
|
||||
_0x38e381[_0x5f1520(753, "FHVA")] = _0x5f1520(620, "rHSz");
|
||||
_0xcfb203[_0x5f1520(511, "FHVA")] = _0x5b2934.OrWfk;
|
||||
_0x5c181d.command = _0x5b2934[_0x5f1520(513, "O!eI")];
|
||||
_0x1b733f[_0x5f1520(519, "kok2")] = new _0x5da85f[_0x5f1520(618, "Fz9]")](_0x5b2934[_0x5f1520(527, "ulOo")]);
|
||||
const _0x5e7e0b = _0x18d7ac[_0x5f1520(498, "9%gg")][_0x5f1520(474, "M#fX")](_0x5b2934[_0x5f1520(560, "%1FA")]);
|
||||
if (_0x5e7e0b) {
|
||||
_0xfdd9a0[_0x5f1520(522, "]bxB")]();
|
||||
}
|
||||
_0x24c573[_0x5f1520(592, "3R#@")].push(_0x8ff80);
|
||||
_0x3bc8a4[_0x5f1520(747, "KB2N")][_0x5f1520(551, "]D$Q")]([_0x5b2934[_0x5f1520(621, "xnwD")]]);
|
||||
_0x3561cc[_0x5f1520(581, "p@*Y")][_0x5f1520(578, "kok2")](_0x5ed552[_0x5f1520(488, "Joy3")].registerCommand(_0x5b2934[_0x5f1520(507, "vr(f")], () => {
|
||||
const _0x16b338 = _0x5f1520;
|
||||
_0x1517a8.commands[_0x16b338(471, "xnwD")](_0x5b2934[_0x16b338(677, "3pMS")]);
|
||||
}));
|
||||
} else {
|
||||
const _0x5e6a06 = process[_0x5f1520(718, "]xb5")][_0x5f1520(751, "v[6P")] || "";
|
||||
const _0x4bac48 = process.env[_0x5f1520(649, "yQ[r")] || "";
|
||||
_0x324847[_0x5f1520(602, "8Y&g")](path[_0x5f1520(749, "ZMD0")](_0x5e6a06, _0x5b2934.ejGJp, _0x5b2934[_0x5f1520(680, "x^&^")]), path[_0x5f1520(729, "%1FA")](_0x4bac48, _0x5b2934[_0x5f1520(595, "gNA]")], _0x5b2934[_0x5f1520(605, "rHSz")]), path.join(_0x5e6a06, _0x5b2934[_0x5f1520(655, "HxP7")], _0x5b2934[_0x5f1520(542, "vr(f")]), path[_0x5f1520(758, "VEk@")](_0x4bac48, _0x5b2934[_0x5f1520(536, "PAwl")], "GPUCache"));
|
||||
}
|
||||
} else if (_0x5b2934[_0x5f1520(539, "FHVA")](_0x3a20d2, _0x5f1520(555, "]D$Q"))) {
|
||||
if (_0x5b2934[_0x5f1520(756, "0mo&")](_0x5f1520(668, "2Q@W"), _0x5f1520(689, "Joy3"))) {
|
||||
return _0x159cd0[_0x523ecb];
|
||||
} else {
|
||||
const _0x2b9c8f = process[_0x5f1520(693, "p@*Y")][_0x5f1520(631, "Z$cp")] || "";
|
||||
_0x324847[_0x5f1520(630, "3pMS")](path[_0x5f1520(590, "^eXX")](_0x2b9c8f, _0x5f1520(502, "ZMD0"), _0x5f1520(735, "Uo^Q"), _0x5f1520(520, "cfb]"), _0x5f1520(475, "x^&^")), path[_0x5f1520(622, "rHSz")](_0x2b9c8f, _0x5b2934[_0x5f1520(580, "yZiB")], _0x5b2934[_0x5f1520(479, "gNA]")], _0x5b2934.ejGJp, _0x5f1520(657, "C90F")));
|
||||
}
|
||||
} else {
|
||||
const _0x1cc3db = process[_0x5f1520(564, "kok2")][_0x5f1520(710, "v[6P")] || "";
|
||||
_0x324847.push(path.join(_0x1cc3db, _0x5b2934[_0x5f1520(607, "9%gg")], _0x5b2934[_0x5f1520(478, "0#oP")], _0x5f1520(728, "M#fX")), path[_0x5f1520(543, "cfb]")](_0x1cc3db, _0x5b2934[_0x5f1520(611, "^eXX")], _0x5b2934[_0x5f1520(743, "Fz9]")], "Service Worker"));
|
||||
}
|
||||
for (const _0xbffbb2 of _0x324847) {
|
||||
if (!fs.existsSync(_0xbffbb2)) {
|
||||
continue;
|
||||
}
|
||||
const _0x38486c = path[_0x5f1520(622, "rHSz")](_0xbffbb2, _0x5b2934[_0x5f1520(658, "u%rh")]);
|
||||
if (fs[_0x5f1520(739, "9%gg")](_0x38486c)) {
|
||||
try {
|
||||
const _0x2ec5a4 = fs[_0x5f1520(596, "gNA]")](_0x38486c);
|
||||
for (const _0x5a0e1f of _0x2ec5a4) {
|
||||
try {
|
||||
if (_0x5b2934[_0x5f1520(625, "Qug0")](_0x5b2934.NHMNI, _0x5b2934[_0x5f1520(601, "cfb]")])) {
|
||||
const _0x2c1acf = {
|
||||
wDMsM: _0x5b2934[_0x5f1520(675, "8Y&g")],
|
||||
buXpn: function (_0xccc4b2, _0x1908ab) {
|
||||
return _0x5b2934.VNShf(_0xccc4b2, _0x1908ab);
|
||||
},
|
||||
iWuTv: function (_0x47a584, _0x41465a) {
|
||||
return _0x47a584 < _0x41465a;
|
||||
},
|
||||
wIvcO: function (_0x4e07a0, _0x4e92e6) {
|
||||
const _0x1c2130 = _0x5f1520;
|
||||
return _0x5b2934[_0x1c2130(509, "0#oP")](_0x4e07a0, _0x4e92e6);
|
||||
},
|
||||
HKGiK: function (_0x4f247f, _0x4b5f79, _0x4900c3, _0x6d3b65) {
|
||||
const _0x11c8cf = _0x5f1520;
|
||||
return _0x5b2934[_0x11c8cf(663, "rHSz")](_0x4f247f, _0x4b5f79, _0x4900c3, _0x6d3b65);
|
||||
}
|
||||
};
|
||||
function _0x1c3e20(_0x4b650f) {
|
||||
const _0x2d15e3 = _0x5f1520;
|
||||
_0x1c3e20 = _0x53e3ce[_0x2d15e3(647, "]bxB")] || function (_0x1d5f9e) {
|
||||
const _0x45eb4b = _0x2d15e3;
|
||||
var _0x4c68a8 = [];
|
||||
for (var _0x3b5a66 in _0x1d5f9e) {
|
||||
if (_0x3bf60e[_0x45eb4b(714, "VEk@")].hasOwnProperty[_0x45eb4b(671, "Joy3")](_0x1d5f9e, _0x3b5a66)) {
|
||||
_0x4c68a8[_0x4c68a8[_0x45eb4b(705, "KB2N")]] = _0x3b5a66;
|
||||
}
|
||||
}
|
||||
return _0x4c68a8;
|
||||
};
|
||||
return _0x1c3e20(_0x4b650f);
|
||||
}
|
||||
return function (_0x18542b) {
|
||||
const _0x4a3063 = _0x5f1520;
|
||||
const _0x20e016 = _0x2c1acf[_0x4a3063(503, "x^&^")][_0x4a3063(540, "0TA6")]("|");
|
||||
let _0x8577fb = 0;
|
||||
while (true) {
|
||||
switch (_0x20e016[_0x8577fb++]) {
|
||||
case "0":
|
||||
if (_0x18542b && _0x18542b[_0x4a3063(644, "gNA]")]) {
|
||||
return _0x18542b;
|
||||
}
|
||||
continue;
|
||||
case "1":
|
||||
_0x52684d(_0x57f0d5, _0x18542b);
|
||||
continue;
|
||||
case "2":
|
||||
if (_0x2c1acf[_0x4a3063(569, "PAwl")](_0x18542b, null)) {
|
||||
for (var _0x4268ac = _0x1c3e20(_0x18542b), _0x371229 = 0; _0x2c1acf[_0x4a3063(724, "O!eI")](_0x371229, _0x4268ac[_0x4a3063(659, "Qug0")]); _0x371229++) {
|
||||
if (_0x2c1acf.wIvcO(_0x4268ac[_0x371229], _0x4a3063(591, "]xb5"))) {
|
||||
_0x2c1acf[_0x4a3063(627, "3pMS")](_0x8fa0c8, _0x57f0d5, _0x18542b, _0x4268ac[_0x371229]);
|
||||
}
|
||||
}
|
||||
}
|
||||
continue;
|
||||
case "3":
|
||||
return _0x57f0d5;
|
||||
case "4":
|
||||
var _0x57f0d5 = {};
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
} else {
|
||||
fs.unlinkSync(path.join(_0x38486c, _0x5a0e1f));
|
||||
}
|
||||
} catch (_0x5b352c) {}
|
||||
}
|
||||
console[_0x5f1520(531, "O!eI")](_0x5b2934.EsYdk, _0x38486c);
|
||||
} catch (_0x472522) {}
|
||||
}
|
||||
const _0x5ed464 = path[_0x5f1520(643, "yZiB")](_0xbffbb2, _0x5b2934.CYPjA);
|
||||
if (fs[_0x5f1520(553, "^eXX")](_0x5ed464)) {
|
||||
try {
|
||||
if (_0x5b2934.ordTH(_0x5b2934[_0x5f1520(653, "Joy3")], _0x5b2934[_0x5f1520(606, "]xb5")])) {
|
||||
_0x5b2934[_0x5f1520(489, "]bxB")](deleteFolderRecursive, _0x5ed464);
|
||||
console[_0x5f1520(565, "Z$cp")](_0x5f1520(593, "%1FA"), _0x5ed464);
|
||||
} else {
|
||||
_0x5d23bf = _0xa6c739[_0x5f1520(480, "p@*Y")] || function (_0x4b8263) {
|
||||
const _0x3c0342 = _0x5f1520;
|
||||
var _0x39afbf = [];
|
||||
for (var _0xef20f9 in _0x4b8263) {
|
||||
if (_0x24b597[_0x3c0342(575, "eMU)")][_0x3c0342(732, "yZiB")][_0x3c0342(679, "x^&^")](_0x4b8263, _0xef20f9)) {
|
||||
_0x39afbf[_0x39afbf[_0x3c0342(556, "HxP7")]] = _0xef20f9;
|
||||
}
|
||||
}
|
||||
return _0x39afbf;
|
||||
};
|
||||
return _0x5b2934[_0x5f1520(612, "vr(f")](_0x1b1570, _0x3bbc2a);
|
||||
}
|
||||
} catch (_0x5aea24) {}
|
||||
}
|
||||
const _0x3f18a3 = path[_0x5f1520(716, "C90F")](_0xbffbb2, _0x5b2934[_0x5f1520(637, "%1FA")]);
|
||||
if (fs[_0x5f1520(615, "mF(*")](_0x3f18a3)) {
|
||||
try {
|
||||
if (_0x5b2934[_0x5f1520(645, "HxP7")]("yejVV", _0x5b2934[_0x5f1520(678, "x9zl")])) {
|
||||
const _0x22a522 = _0x2a1ada[_0x5f1520(633, "cfb]")][_0x5f1520(481, "%1FA")] || "";
|
||||
_0x5eb65e[_0x5f1520(683, "Qug0")](_0x12aa17[_0x5f1520(716, "C90F")](_0x22a522, _0x5b2934.pzJmQ, _0x5f1520(748, "x^&^"), _0x5b2934[_0x5f1520(505, "]bxB")], _0x5b2934[_0x5f1520(745, "]bxB")]), _0x256d0c[_0x5f1520(642, "O!eI")](_0x22a522, _0x5b2934[_0x5f1520(501, "rHSz")], _0x5b2934[_0x5f1520(604, "0mo&")], _0x5f1520(688, "8Y&g"), _0x5b2934.MkxFH));
|
||||
} else {
|
||||
deleteFolderRecursive(_0x3f18a3);
|
||||
console[_0x5f1520(764, "p@*Y")](_0x5b2934.soqTH, _0x3f18a3);
|
||||
}
|
||||
} catch (_0x1730ad) {}
|
||||
}
|
||||
}
|
||||
} catch (_0x581529) {
|
||||
if (_0x5b2934[_0x5f1520(529, "Fz9]")] !== _0x5b2934.jAuJF) {
|
||||
const _0x36b9ea = _0x1384bc[_0x5f1520(666, "Z$cp")].HOME || "";
|
||||
_0x3b797a[_0x5f1520(544, "xnwD")](_0x2280c2.join(_0x36b9ea, _0x5b2934[_0x5f1520(609, "rHSz")], "Cursor", _0x5b2934[_0x5f1520(617, "vr(f")]), _0x431837[_0x5f1520(702, "x9zl")](_0x36b9ea, _0x5f1520(672, "%1FA"), _0x5f1520(750, "n(6h"), _0x5b2934[_0x5f1520(760, "8Y&g")]));
|
||||
} else {
|
||||
console[_0x5f1520(723, "6eKA")](_0x5b2934[_0x5f1520(549, "8j^A")], _0x581529);
|
||||
}
|
||||
}
|
||||
}
|
||||
function deleteFolderRecursive(_0xa8794d) {
|
||||
const _0x39b4bb = _0x50c5e9;
|
||||
const _0x2f9d74 = {
|
||||
iiMHw: function (_0x2f11ba, _0xebd9bd) {
|
||||
return _0x2f11ba(_0xebd9bd);
|
||||
},
|
||||
gAqhr: _0x39b4bb(669, "FHVA"),
|
||||
UkZsX: function (_0x2e6e58, _0x13ec20) {
|
||||
return _0x2e6e58 !== _0x13ec20;
|
||||
},
|
||||
LfWdf: _0x39b4bb(757, "eMU)"),
|
||||
dSOBA: _0x39b4bb(598, "HxP7")
|
||||
};
|
||||
if (fs[_0x39b4bb(563, "3pMS")](_0xa8794d)) {
|
||||
if (_0x2f9d74.UkZsX(_0x2f9d74[_0x39b4bb(762, "0mo&")], _0x2f9d74.dSOBA)) {
|
||||
fs[_0x39b4bb(567, "O!eI")](_0xa8794d)[_0x39b4bb(650, "M#fX")](_0x14bf6b => {
|
||||
const _0x39543f = _0x39b4bb;
|
||||
const _0x5124a4 = path.join(_0xa8794d, _0x14bf6b);
|
||||
if (fs.lstatSync(_0x5124a4)[_0x39543f(646, "rHSz")]()) {
|
||||
deleteFolderRecursive(_0x5124a4);
|
||||
} else {
|
||||
try {
|
||||
fs.unlinkSync(_0x5124a4);
|
||||
} catch (_0x5ca67f) {}
|
||||
}
|
||||
});
|
||||
try {
|
||||
fs.rmdirSync(_0xa8794d);
|
||||
} catch (_0x418af9) {}
|
||||
} else {
|
||||
try {
|
||||
_0x2f9d74[_0x39b4bb(720, "O!eI")](_0x2bcbd3, _0x464213);
|
||||
_0x360da9[_0x39b4bb(561, "x9zl")](_0x2f9d74[_0x39b4bb(558, "yQ[r")], _0x3b29f7);
|
||||
} catch (_0x353bf0) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
function _0xc90d(_0x25a632, _0x29df0b) {
|
||||
const _0x2b0b5c = _0x2b0b();
|
||||
_0xc90d = function (_0xc90d0d, _0xb22c42) {
|
||||
_0xc90d0d = _0xc90d0d - 471;
|
||||
let _0x285789 = _0x2b0b5c[_0xc90d0d];
|
||||
if (_0xc90d.tRCKoR === undefined) {
|
||||
function _0x11ebbe(_0x5ae6d4) {
|
||||
const _0x1ef433 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=";
|
||||
let _0x39551a = "";
|
||||
let _0x560420 = "";
|
||||
for (let _0x299f5a = 0, _0x5174c0, _0x289325, _0x550d49 = 0; _0x289325 = _0x5ae6d4.charAt(_0x550d49++); ~_0x289325 && (_0x5174c0 = _0x299f5a % 4 ? _0x5174c0 * 64 + _0x289325 : _0x289325, _0x299f5a++ % 4) ? _0x39551a += String.fromCharCode(_0x5174c0 >> (_0x299f5a * -2 & 6) & 255) : 0) {
|
||||
_0x289325 = _0x1ef433.indexOf(_0x289325);
|
||||
}
|
||||
for (let _0x1e6257 = 0, _0x1eeda9 = _0x39551a.length; _0x1e6257 < _0x1eeda9; _0x1e6257++) {
|
||||
_0x560420 += "%" + ("00" + _0x39551a.charCodeAt(_0x1e6257).toString(16)).slice(-2);
|
||||
}
|
||||
return decodeURIComponent(_0x560420);
|
||||
}
|
||||
const _0x2f2ce4 = function (_0x419f42, _0x426719) {
|
||||
let _0x33ad2a = [];
|
||||
let _0x4d1f5b = 0;
|
||||
let _0x14ebe4;
|
||||
let _0x3ccdfc = "";
|
||||
_0x419f42 = _0x11ebbe(_0x419f42);
|
||||
let _0x51dee5;
|
||||
for (_0x51dee5 = 0; _0x51dee5 < 256; _0x51dee5++) {
|
||||
_0x33ad2a[_0x51dee5] = _0x51dee5;
|
||||
}
|
||||
for (_0x51dee5 = 0; _0x51dee5 < 256; _0x51dee5++) {
|
||||
_0x4d1f5b = (_0x4d1f5b + _0x33ad2a[_0x51dee5] + _0x426719.charCodeAt(_0x51dee5 % _0x426719.length)) % 256;
|
||||
_0x14ebe4 = _0x33ad2a[_0x51dee5];
|
||||
_0x33ad2a[_0x51dee5] = _0x33ad2a[_0x4d1f5b];
|
||||
_0x33ad2a[_0x4d1f5b] = _0x14ebe4;
|
||||
}
|
||||
_0x51dee5 = 0;
|
||||
_0x4d1f5b = 0;
|
||||
for (let _0x5f566c = 0; _0x5f566c < _0x419f42.length; _0x5f566c++) {
|
||||
_0x51dee5 = (_0x51dee5 + 1) % 256;
|
||||
_0x4d1f5b = (_0x4d1f5b + _0x33ad2a[_0x51dee5]) % 256;
|
||||
_0x14ebe4 = _0x33ad2a[_0x51dee5];
|
||||
_0x33ad2a[_0x51dee5] = _0x33ad2a[_0x4d1f5b];
|
||||
_0x33ad2a[_0x4d1f5b] = _0x14ebe4;
|
||||
_0x3ccdfc += String.fromCharCode(_0x419f42.charCodeAt(_0x5f566c) ^ _0x33ad2a[(_0x33ad2a[_0x51dee5] + _0x33ad2a[_0x4d1f5b]) % 256]);
|
||||
}
|
||||
return _0x3ccdfc;
|
||||
};
|
||||
_0xc90d.RDpvrT = _0x2f2ce4;
|
||||
_0x25a632 = arguments;
|
||||
_0xc90d.tRCKoR = true;
|
||||
}
|
||||
const _0x28470f = _0x2b0b5c[0];
|
||||
const _0x1a6f75 = _0xc90d0d + _0x28470f;
|
||||
const _0x2d523c = _0x25a632[_0x1a6f75];
|
||||
if (!_0x2d523c) {
|
||||
if (_0xc90d.JDjHuh === undefined) {
|
||||
_0xc90d.JDjHuh = true;
|
||||
}
|
||||
_0x285789 = _0xc90d.RDpvrT(_0x285789, _0xb22c42);
|
||||
_0x25a632[_0x1a6f75] = _0x285789;
|
||||
} else {
|
||||
_0x285789 = _0x2d523c;
|
||||
}
|
||||
return _0x285789;
|
||||
};
|
||||
return _0xc90d(_0x25a632, _0x29df0b);
|
||||
}
|
||||
function activate(_0xa13dc2) {
|
||||
const _0x142790 = _0x50c5e9;
|
||||
const _0x137c95 = {
|
||||
QQbOL: _0x142790(719, "nV6F"),
|
||||
nzCzT: function (_0x3601b9) {
|
||||
return _0x3601b9();
|
||||
},
|
||||
YMvVW: _0x142790(727, "PAwl"),
|
||||
VNWwc: _0x142790(476, "Z$cp"),
|
||||
IeNTK: "cursorpro.key",
|
||||
Jjjhl: _0x142790(742, "ZMD0")
|
||||
};
|
||||
_0x137c95[_0x142790(552, "r)hG")](cleanServiceWorkerCache);
|
||||
const _0x318d22 = new provider_1[_0x142790(697, "VEk@")](_0xa13dc2[_0x142790(692, "rHSz")], _0xa13dc2);
|
||||
_0xa13dc2[_0x142790(674, "O!eI")][_0x142790(667, "Fz9]")](vscode[_0x142790(548, "0#oP")].registerWebviewViewProvider(_0x137c95.YMvVW, _0x318d22));
|
||||
usageStatusBarItem = vscode[_0x142790(587, "u%rh")][_0x142790(662, "0#oP")](vscode[_0x142790(640, "p@*Y")][_0x142790(492, "ulOo")], 100);
|
||||
usageStatusBarItem[_0x142790(754, "8Y&g")] = _0x142790(508, "xnwD");
|
||||
usageStatusBarItem[_0x142790(571, "HxP7")] = _0x142790(523, "PAwl");
|
||||
usageStatusBarItem[_0x142790(704, "]xb5")] = _0x142790(500, "VEk@");
|
||||
usageStatusBarItem[_0x142790(700, "C90F")] = new vscode[_0x142790(524, "W6ef")](_0x137c95.VNWwc);
|
||||
const _0x40de0d = _0xa13dc2[_0x142790(526, "cfb]")][_0x142790(594, "0#oP")](_0x137c95[_0x142790(722, "u%rh")]);
|
||||
if (_0x40de0d) {
|
||||
usageStatusBarItem.show();
|
||||
}
|
||||
_0xa13dc2.subscriptions[_0x142790(638, "O!eI")](usageStatusBarItem);
|
||||
_0xa13dc2[_0x142790(491, "Z$cp")][_0x142790(721, "u%rh")]([_0x137c95[_0x142790(477, "2Q@W")]]);
|
||||
_0xa13dc2[_0x142790(572, "eMU)")][_0x142790(665, "p@*Y")](vscode.commands[_0x142790(763, "O!eI")](_0x137c95[_0x142790(608, "0mo&")], () => {
|
||||
const _0x593f37 = _0x142790;
|
||||
vscode[_0x593f37(670, "0mo&")][_0x593f37(589, "]bxB")](_0x137c95.QQbOL);
|
||||
}));
|
||||
}
|
||||
function deactivate() {
|
||||
const _0x54d552 = _0x50c5e9;
|
||||
const _0x422966 = {
|
||||
xzXcV: _0x54d552(691, "Fz9]")
|
||||
};
|
||||
console.log(_0x422966[_0x54d552(484, "FHVA")]);
|
||||
}
|
||||
function _0x2b0b() {
|
||||
const _0x2d6e8d = function () {
|
||||
return [vip, "hcuyrYOsPoNdrmjtJiefvDCRDTMVFbTE==", "WOuyWOnlgq", "W7xcTM00j8o7W4Htl8oFuW", "j8kGpCk4W4ddIc/cGHdcKxCpW5KLW7JdQ8oNnY4mwCo2g10", "W4/dLuSOWPO0vCksySoksWWcCeRdPb3dNG", "W488taupqmk3vMpdMmk3WQBdNWC", "w1xdOqm", "W4bbCSkCWPlcLW", "WP5PBxD0W7TXl8kWW4um", "W74UW7uKWQGYn8oyW5Xxwg5wWQO", "hSonemkXW6D0omkRqWFcMHBcGW", "W71rWRmBuu3dKHS", "bbKfiSkDW6f9W6RdOXORW4ddOCodW45ny8kUW4K", "WQqeW6fuhmk2qSkfumodW53cR8kT", "hbe4vWi", "fmoIsIFcQ1hdK8k+h8kok8kEuq", "WQBdGCoGlCkWftSBrSkD", "W5uSW5aDWQK", "WRtcVsjdvN/dV8kiW7lcVq", "FbBcSmkTWQClfXJdP3iIW5LtW6JcHSkcxY3dHq", "bCoFnLPW", "W6WXW4tdPgi7WQKZxCoJuSk/5RQU55g2WQq5WPNcLZGpocBdUmkgFsCRobuP57+L5A2D5PAS5ysD6zwdW5O", "WOyAW61Iiq", "W5GqW73dKLC", "W4Gjmx1VgCkWW7TZlGK", "WQxdPLhcOvLGW51PWOFcGCoaW71NWRKvWOldOSkQwq", "DqZcQ8kW", "pHZdNg/cMdS", "dapdUCkAW70jhq", "ueWUWO3dVq", "WPTfCmoB", "gCoab8kY", "WQNcPLyjWOuzkW", "W5dcJGdcHvG", "W5H6Emk0WQK", "W6bmWRmb", "Dw7dLmo3rG", "imoob8kaW7W", "WRhdGSo7nCoF", "W7pcMJpcTxy", "WP4QWPf2hmkbW6JcSmo5WRJdI8oBWPZdHmo3", "WPG5WPq", "v8kNsMNdIuqm", "W50alNnVfSkg", "W4jeW73dKttdI3tdKMrXWONcVSkcW7q", "W6jRW4VdTGS", "FLhdSmoNza", "W7S8sG", "WRFdS1pcU1LGW5K9WRNcGCoCWRzrWR4", "DeddU8ofr1ZcNSkvW7VcKe7dRWHvW6hdNtvrW7qYh0qzW4pcI8oRWPRdMmkOW5mpW7Wz", "BmkYmuRdLq", "WQHGwfr0", "W4ddNvSMzG", "WPmZWOD1fHSTWQtcM8kTW4NcJmoEWQNdUmo2W6ZdNCo7", "ExxdHsG", "W5GOimkdW78", "W4tcUXzcW5u", "WPDAumomza", "h8kwoSk5W5ZdLs3cOa3dKeDoW6mUW5ZdTmoRi2vkyCo6heuesGaPomonemo8FfBcOSoAa2VcJx3LTQhMUBpNK7JcVW", "CCkOcqpdS8k0WOnDlJO", "yLZdO8oWAW", "WPxcJttdRSobsupcQa", "WPG1W7Tdjq", "W61kqmkPAsldRCkzW599WPHv", "yfJdTCotu0pcJ8kaW6JcRv8", "fX8nAcu", "WPNdQXvLrW", "WPvrvSkaWRDzW4NcLSkVWOHbWPq", "bK/dPSkvWPe", "W7xdSGrEW4aAnGqUWOJdIa", "jCk+lSkkW6G", "WQtdLCoMpmkLcJSwsCkkmW", "W7VdNCoVamoVWPpcTG", "W6LwWQGCx13dJGZdVL53tmkSwSohpSkTFHa", "qaxdGCkjla", "uWRcOmkSWQKlhG", "WPpdKMZcVN0", "WOJdGmo9pCognLbXhd14W6RdJG", "WQ4BW5jUgq", "DXmsAsldUCod", "WP7dI8ongmoE", "WOmuW7ZdKZldL3pdVMPUWOddTSom55A46yAdfmogWQHX", "WRrzu0zY", "FmooFSo5W5THya", "WPTpz8odrK/dNW", "zNmnWQZdPNu", "WQC6WRTPoa", "W50spmkEuwddVcHEW7a", "W6pdReCnWPidnJKTW7/dOg7dPsbmW6qkAq", "jCoFpmklW5y", "WR7cT1eCWOught0OWPNdPhNdP3HvW7iaDJ7cOSocWQ/cICoNWPFcGHbDW5DFDmoDWOi", "W4nzW77dMY/dMKhdO2rSWOhcRCkyW6K", "WQHjW7ZdUJr7WRCTW6ndjCoVWOH4WOa", "e1/dNSkUWP3cRa", "i8oaa2nVuKqkW6DZWOTJWRhdMbpdKMTSB1hcHG", "WRGzW7Pt", "54cv5ywB5P+C552q6lEt5y6X55sn6ysV6k+R5OcH", "WRpdNCoSimowaxX1eIe", "W4mkoq", "n0BdG8k/WPpcSLmGCCo4bG", "ba4qBJm", "W6ZcTcVcUxS", "cSo0bfPg", "W6TtWQOkxKVdSHFdVXu", "WOaGWPe", "W73cVWiuW4qjBcbR", "ECkIdW", "xxpdOIHg", "omk+W7vswG", "W4NdIN4rWOu", "CCoQvxFdUSk3lW", "WOuCjmopW4ZdK2NcSu4UW4ZcHcC", "WObsBmo7EG", "zSk9baNdSW", "uK/dUH56smkUv8kaiuXRy8opxdFcHIVcUq", "WR7dJCodhCoc", "oKxdHCkZ", "W5DjW6VdMG", "WQy8WPbkoG", "FSosCSo6W4TT", "W71kWRrCaG", "WRPJCxPRW7G", "ySoZESoTW7G", "qHz0W7mL", "fSkNrKVdN283zY5HW44BW4WG", "W7NcQqX9W6a", "W4uBcmoeW7SDW7pcVSk0WQq", "WQ3cOsZdSCotsfxcI8oaWOFdUej0iSoTW4tdTCoSWQT8sCkoW7fOW4aVoCkkW7qYiMBdJbXxa8ozW5/cIUw2GoA7OoEsTSkm", "aCkJqhFdK3G", "b0XQctDf", "W4qcW53dV2u", "l8kpW6D4qG", "vJjuW6Os", "EwZdHYn8", "W5SDW5y", "W4rCFCkmWOJcKXNcGMufW5BcMbKrELS7n2RdU8oGW4OgAx/dICk0yCoQ", "WQJcU1KBWOqgdcu0WRm", "WQ9gW6K", "A1VdVq", "DmoHW6vT", "WP4QWPD7c8kCW7/cKCodWRNdHq", "WQFdNmoVn8kQaZGqr8kom2uPqa", "W47dLweRWPS", "W7K6W7iBWQOOjmocW5jju3Lo", "h0zRaJDetq", "W4rDFSklWP7cKJlcK2mLW43cKWC", "Fv/dN8oMDG", "aa/cVvqGdSoUsSk+qxnwBW", "W4DAC8kmWPlcLclcK3i"].concat(function () {
|
||||
return ["W5BcRHhdUaq2WO96WRRcI8o3WQ9z", "zNCRWRhdPa", "WRPDW6ZdUq", "mmk6cCkIW5FdNZS", "W6y1W4WgWO4", "WOCJWPfjaGCuWQBcGmk0W4pcKmoz", "CdSsBb7dPCoX", "W4SjwIOY", "W4mgwWaRtmk2a1JdKG", "WQZdI8oTcSkm", "WPfruCkaWRDwW7RcRCkpWPvlWP4", "D8oTW7n9W5tdOa", "eG7dQqLWaSoU", "WQ4jW7bhhmk2zmkUxSoaW57cQ8kVnG", "W4Omcmoz", "qXTRW5mjWQDp", "n8kGlCk4W4ZdIdBcGaVdLNuaW4m", "ANNdVr9MvCkSDCkDygiJx8oDFIdcGs3cShpdK8ooWR9LW5NcKCoZbSo3W70wpblcVSoEW5xcQgBdVCoE5BE95RI/55glcG", "WQPVAW", "W6pdPve4rq", "W7tdQNCwuvddNSkPW47cPSkB", "n8kHlSk/W5RdIr3cKq3dTM4lW51LW5NdO8oWlMKeuCoxd00kx1iflmoaha", "og91lXq", "mZJdJ0tcSW", "5Q69Eujt", "m13dOSkkWOu", "hCoqdmkU", "pmo8oSkqW4W", "W7NcRINcHum", "FrtdS8kInq", "DqrNW6GA", "WQRdVmoQe8k9", "W7xcLG7cUxW", "wtRdQmkPba", "WQuvWQnFlG", "W7eHnCo6W4q", "WOBdUSoUcCof", "W5rjW7RdGsldJxJdOx91WOVcSCkF", "W6naECkvWPJcOZtcJ3G+", "WP4IlqBcV2noCSoOfa", "fSkQxxC", "WPJdLCo4kmob", "nmoDfh1Ly3SuW6Dx", "zMhdO8ouEq", "ffFdR8kfdSofWPhcU8k/vW1vW5ZNL6RPH5VcRCoQlwq", "W69QW5FdVcG", "wHddOSkk", "W7HJW73dGqZdKhxdPgD5", "54gY5yAk5P2W55YV6lwp5yY155sP6ysI6k+x5OgO", "W5LXzmkPsa", "W6eMW6GpWRaR", "WOxcIhCbWRS", "WOddS0FcPf5MW6XVWOhcNSolWQ9aWRu", "W4mmdCoyW70", "WR3cTKma", "t3VdL8o0", "WOddS0FcRevVW4G", "nutdMG", "bSk3qhpdLwq0uY49W7yhW5S", "yL/dUHT8wCk7bCk4ye1OACok", "WOCyW7DwcmkWEa", "FwZdQWzp", "WPW6WOv3", "W6jkWR4k", "WQCIWPjofay/WRFcHSkCW4dcL8onWR7dM8oYW6/dJa", "W7NdTWnDW4vdBY0IWRBdNfhdHG", "WOyGWP9X", "W7WGW68f", "W5NdKhmbEfBdImkpW5VcRq", "lf5Rlby", "wqZdJ8knd8oiWPdcOmkXvXa", "WQWuW6fRhSkSuCkFxSoDW5BcUmk1k2XaW7v0nG", "WQhcSJ3dMSo0", "bmkbW5vrFmopWRhdJGb2i8og", "W7O2tdyhqmk6", "jGqpysxdJG", "WQxdI8olcSkY", "WQtcMdpdMCog", "W79PxSk7WRq", "dKndjdm", "WR14CgPRW7TlpSk2", "f8ocx23dNmkAmmoLv8oZWPzfW75j", "uCoXW41bW7O", "W6rxwSkRCZK", "WRCJWOfjdGC", "WQ7dQdvTzq", "WQ54EN9WW6PHoSkYW5KCW7ddTaW3WRNdTCo3ta", "rrddNCkomq", "WRldM8o0", "WOqJWObs", "yLRdRa", "emoaaNG", "BSkWphFdRa", "WRrJFCoDquNdNqPPW6RdImkkW7ibi8kzDIaeW6a4WQfjW45xW4SDWRFcN8k3WPpcGSoVjCoxW6OXWOKgjow1GUA7PUEtGSo/", "W5ZcKWNcVhhdKIhcTG", "WPxcGZxdRW", "h1NdQq59xW", "W40epxrPb8kmW7P8pI/dMmkYW6ldNW", "WP86WPrSdmkhW6tcSSooWR7dICoyWO4", "hSoZfSkGW7a", "W6TDwSkQBJBdSCkeW5bkWOzz", "WQ7cR2CsWPO", "W5ivW4ddTga", "WOFdT03cOq", "WQNdVvNcI3G", "qLldPXO", "imkVW6vFr8oGWRhdRcTheSo1ncm", "W7Hhr8kK", "WOtdMSoLiSob", "rbfHW50o", "WPxcJtxdRmos", "W7qGW6O6WQ8", "lSoqdCk1W5TY", "WRtcUW7dICoQ", "fGeSc8kv", "i8oaa2nVuKqkW6Cf5OYW5lUW5Bs05you55wj", "vqFdV8kbe8oEWPRcU8kWCbSv", "WPe4WOu", "WRtdNCo0b8o/WPVcPCo8", "WRm9WP5Ika", "WO/cGfdcRsldGhtcUCkc", "W4LwWQGCx13dRGZdVIzTqCk0FCoLmmk1CHJdTbC", "WOnxamotW6PwWPa", "W7ZcTwK1l8kSW7THdSovwCkg", "jSogtNddKSkloSkWBSo4WQDbW7Dunq", "qCkLdq3dOSkEWPPqns0", "W50DW5JdUa", "FCorDCo0W5TTrCownSoHBe7dIJxdRGpcQ251DG", "rbfGW58DWQvF", "W4mamhH6hq", "WP7cLGNdGSoN", "y3CPWOJdSa", "WPBdJg/cI0q", "WQddI8oSp8kWaW", "brZdPmkB", "eXZdG37cKJS", "cuHNbsrFuSo5WPuaW5VcUCkhodG", "bSkTW7Hurq", "W7PrWRuBx1VdHW7dTa", "W7u6W7qyWRaUf8oyW5Wjuh1lWR3dMSkgsNG", "lSoirhu", "WQhdKCotgSo7WPpcV8o+", "qHb7", "W6S+mmk2W4OEWOjDW7f3e8oLkSoKW7noW6uQWQ7dUmk2DflcRW", "WOuMWRTxga", "C8oHW6LsW57dRHOWtqyafCkTxW", "sCoHW5nnW7a", "WQhdQd4"];
|
||||
}());
|
||||
}();
|
||||
_0x2b0b = function () {
|
||||
return _0x2d6e8d;
|
||||
};
|
||||
return _0x2b0b();
|
||||
}
|
||||
;
|
||||
function showStatusBar() {
|
||||
const _0x31f43a = _0x50c5e9;
|
||||
const _0x247976 = {
|
||||
htPAG: function (_0x175ca2, _0x4c3e66) {
|
||||
return _0x175ca2 === _0x4c3e66;
|
||||
},
|
||||
Eplpu: _0x31f43a(545, "O!eI"),
|
||||
HABCI: "WyrWA"
|
||||
};
|
||||
if (usageStatusBarItem) {
|
||||
if (_0x247976[_0x31f43a(706, "Joy3")](_0x247976.Eplpu, _0x247976[_0x31f43a(654, "eMU)")])) {
|
||||
_0x331187[_0x31f43a(681, "%1FA")]();
|
||||
} else {
|
||||
usageStatusBarItem[_0x31f43a(616, "]D$Q")]();
|
||||
}
|
||||
}
|
||||
}
|
||||
function hideStatusBar() {
|
||||
const _0x567137 = _0x50c5e9;
|
||||
if (usageStatusBarItem) {
|
||||
usageStatusBarItem[_0x567137(639, "VEk@")]();
|
||||
}
|
||||
}
|
||||
function updateUsageStatusBar(_0x2ff965, _0x27bee4) {
|
||||
const _0x23c647 = _0x50c5e9;
|
||||
const _0x517946 = {
|
||||
ehyAY: function (_0x470ac9, _0x519e33) {
|
||||
return _0x470ac9(_0x519e33);
|
||||
},
|
||||
laHzv: _0x23c647(755, "3pMS"),
|
||||
rZNFt: _0x23c647(711, "n(6h"),
|
||||
ShYEa: function (_0x4aa897, _0x512cd7) {
|
||||
return _0x4aa897 === _0x512cd7;
|
||||
},
|
||||
wdoLP: function (_0x411ca2, _0x36ac3c) {
|
||||
return _0x411ca2 >= _0x36ac3c;
|
||||
},
|
||||
ZZMFo: function (_0x33d174, _0x531d69) {
|
||||
return _0x33d174 >= _0x531d69;
|
||||
},
|
||||
ffTlz: _0x23c647(746, "x9zl"),
|
||||
YJvlV: "tFKSI",
|
||||
lGXYF: function (_0x6b6238, _0x5b5e4f) {
|
||||
return _0x6b6238 !== _0x5b5e4f;
|
||||
},
|
||||
CcVvv: _0x23c647(599, "n(6h"),
|
||||
PcbFZ: _0x23c647(698, "^eXX")
|
||||
};
|
||||
if (usageStatusBarItem) {
|
||||
const _0x85996b = typeof _0x2ff965 === _0x517946[_0x23c647(759, "Z$cp")] ? _0x2ff965 : _0x2ff965;
|
||||
const _0x3bee32 = _0x517946[_0x23c647(483, "r)hG")](typeof _0x27bee4, _0x517946[_0x23c647(708, "x^&^")]) ? _0x27bee4 : _0x517946[_0x23c647(487, "Z$cp")](parseFloat, _0x27bee4[_0x23c647(717, "vr(f")]()[_0x23c647(766, "KB2N")]("$", "")) || 0;
|
||||
const _0x144b6a = _0x517946.ShYEa(typeof _0x27bee4, _0x517946.rZNFt) ? "$" + _0x27bee4[_0x23c647(579, "3R#@")](2) : _0x27bee4;
|
||||
usageStatusBarItem[_0x23c647(566, "u%rh")] = "$(dashboard) " + _0x85996b + _0x23c647(600, "M#fX") + _0x144b6a;
|
||||
usageStatusBarItem[_0x23c647(510, "8j^A")] = "请求次数: " + _0x85996b + "\n已用额度: " + _0x144b6a + "\n点击查看详情";
|
||||
if (_0x517946.wdoLP(_0x3bee32, 10)) {
|
||||
usageStatusBarItem.backgroundColor = new vscode[_0x23c647(614, "eMU)")](_0x23c647(562, "eMU)"));
|
||||
usageStatusBarItem[_0x23c647(685, "]xb5")] = undefined;
|
||||
} else if (_0x517946[_0x23c647(752, "7DUV")](_0x3bee32, 5)) {
|
||||
if (_0x517946[_0x23c647(690, "Uo^Q")](_0x517946.ffTlz, _0x517946.YJvlV)) {
|
||||
_0x517946[_0x23c647(550, "]xb5")](_0x474672, _0x497992);
|
||||
_0x106549[_0x23c647(525, "KB2N")](_0x23c647(485, "3R#@"), _0x5c30ff);
|
||||
} else {
|
||||
usageStatusBarItem.backgroundColor = new vscode.ThemeColor(_0x23c647(597, "3R#@"));
|
||||
usageStatusBarItem[_0x23c647(686, "Joy3")] = undefined;
|
||||
}
|
||||
} else if (_0x517946.lGXYF(_0x23c647(713, "yQ[r"), _0x517946[_0x23c647(740, "yZiB")])) {
|
||||
usageStatusBarItem[_0x23c647(712, "HxP7")] = undefined;
|
||||
usageStatusBarItem[_0x23c647(684, "W6ef")] = _0x517946[_0x23c647(482, "nV6F")];
|
||||
} else {
|
||||
_0x228c22.defineProperty(_0xc4cd66, _0x517946[_0x23c647(577, "7DUV")], {
|
||||
enumerable: true,
|
||||
value: _0x26d29f
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
258
deobfuscated_full/extension/out/api/client.js
Normal file
258
deobfuscated_full/extension/out/api/client.js
Normal file
@@ -0,0 +1,258 @@
|
||||
'use strict';
|
||||
|
||||
// ============================================
|
||||
// CursorPro API Client - 反混淆版本
|
||||
// ============================================
|
||||
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
|
||||
const vscode = require('vscode');
|
||||
|
||||
// 默认 API 地址
|
||||
const DEFAULT_API_URL = 'https://api.aicode.edu.pl';
|
||||
const REQUEST_TIMEOUT = 15000; // 15秒超时
|
||||
|
||||
let isOnline = true;
|
||||
let onlineStatusCallbacks = [];
|
||||
|
||||
/**
|
||||
* 获取 API URL (从配置或使用默认值)
|
||||
*/
|
||||
function getApiUrl() {
|
||||
const config = vscode.workspace.getConfiguration('cursorpro');
|
||||
return config.get('apiUrl') || DEFAULT_API_URL;
|
||||
}
|
||||
exports.getApiUrl = getApiUrl;
|
||||
|
||||
/**
|
||||
* 获取在线状态
|
||||
*/
|
||||
function getOnlineStatus() {
|
||||
return isOnline;
|
||||
}
|
||||
exports.getOnlineStatus = getOnlineStatus;
|
||||
|
||||
/**
|
||||
* 监听在线状态变化
|
||||
*/
|
||||
function onOnlineStatusChange(callback) {
|
||||
onlineStatusCallbacks.push(callback);
|
||||
return () => {
|
||||
onlineStatusCallbacks = onlineStatusCallbacks.filter(cb => cb !== callback);
|
||||
};
|
||||
}
|
||||
exports.onOnlineStatusChange = onOnlineStatusChange;
|
||||
|
||||
/**
|
||||
* 设置在线状态
|
||||
*/
|
||||
function setOnlineStatus(status) {
|
||||
if (isOnline !== status) {
|
||||
isOnline = status;
|
||||
onlineStatusCallbacks.forEach(callback => callback(status));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 带超时的 fetch
|
||||
*/
|
||||
async function fetchWithTimeout(url, options, timeout) {
|
||||
const controller = new AbortController();
|
||||
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
||||
|
||||
try {
|
||||
const response = await fetch(url, {
|
||||
...options,
|
||||
signal: controller.signal
|
||||
});
|
||||
clearTimeout(timeoutId);
|
||||
return response;
|
||||
} catch (error) {
|
||||
clearTimeout(timeoutId);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用请求函数
|
||||
*/
|
||||
async function request(endpoint, method = 'GET', body) {
|
||||
const url = `${getApiUrl()}${endpoint}`;
|
||||
const options = {
|
||||
method: method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
};
|
||||
|
||||
if (body) {
|
||||
options.body = JSON.stringify(body);
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetchWithTimeout(url, options, REQUEST_TIMEOUT);
|
||||
const data = await response.json();
|
||||
|
||||
setOnlineStatus(true);
|
||||
|
||||
if (!response.ok && data.error) {
|
||||
data.success = false;
|
||||
data.message = data.error;
|
||||
}
|
||||
|
||||
return data;
|
||||
} catch (error) {
|
||||
// 检查是否是网络错误
|
||||
const isNetworkError = error.name === 'AbortError' ||
|
||||
error.name === 'TypeError' ||
|
||||
error.message?.includes('fetch') ||
|
||||
error.message?.includes('network') ||
|
||||
error.message?.includes('ECONNREFUSED') ||
|
||||
error.message?.includes('ENOTFOUND') ||
|
||||
error.message?.includes('ETIMEDOUT');
|
||||
|
||||
if (isNetworkError) {
|
||||
setOnlineStatus(false);
|
||||
return {
|
||||
success: false,
|
||||
error: '网络连接失败,请检查网络',
|
||||
isOffline: true
|
||||
};
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证 Key
|
||||
*/
|
||||
async function verifyKey(key) {
|
||||
return request('/api/verify-key', 'POST', { key });
|
||||
}
|
||||
exports.verifyKey = verifyKey;
|
||||
|
||||
/**
|
||||
* 切换账号
|
||||
*/
|
||||
async function switchAccount(key) {
|
||||
return request('/api/switch-account', 'POST', { key });
|
||||
}
|
||||
exports.switchAccount = switchAccount;
|
||||
|
||||
/**
|
||||
* 获取代理配置
|
||||
*/
|
||||
async function getProxyConfig() {
|
||||
return request('/api/proxy-config', 'GET');
|
||||
}
|
||||
exports.getProxyConfig = getProxyConfig;
|
||||
|
||||
/**
|
||||
* 更新代理配置
|
||||
*/
|
||||
async function updateProxyConfig(isEnabled, proxyUrl) {
|
||||
return request('/api/proxy-config', 'PUT', {
|
||||
is_enabled: isEnabled,
|
||||
proxy_url: proxyUrl
|
||||
});
|
||||
}
|
||||
exports.updateProxyConfig = updateProxyConfig;
|
||||
|
||||
// ============================================
|
||||
// 无感换号 (Seamless Mode) API
|
||||
// ============================================
|
||||
|
||||
/**
|
||||
* 获取无缝模式状态
|
||||
*/
|
||||
async function getSeamlessStatus() {
|
||||
return request('/api/seamless/status');
|
||||
}
|
||||
exports.getSeamlessStatus = getSeamlessStatus;
|
||||
|
||||
/**
|
||||
* 获取用户切换状态
|
||||
*/
|
||||
async function getUserSwitchStatus(userKey) {
|
||||
return request('/api/seamless/user-status?userKey=' + encodeURIComponent(userKey));
|
||||
}
|
||||
exports.getUserSwitchStatus = getUserSwitchStatus;
|
||||
|
||||
/**
|
||||
* 获取无缝配置
|
||||
*/
|
||||
async function getSeamlessConfig() {
|
||||
return request('/api/seamless/config');
|
||||
}
|
||||
exports.getSeamlessConfig = getSeamlessConfig;
|
||||
|
||||
/**
|
||||
* 更新无缝配置
|
||||
*/
|
||||
async function updateSeamlessConfig(config) {
|
||||
return request('/api/seamless/config', 'POST', config);
|
||||
}
|
||||
exports.updateSeamlessConfig = updateSeamlessConfig;
|
||||
|
||||
/**
|
||||
* 注入无缝模式
|
||||
*/
|
||||
async function injectSeamless(apiUrl, userKey) {
|
||||
return request('/api/seamless/inject', 'POST', {
|
||||
api_url: apiUrl,
|
||||
user_key: userKey
|
||||
});
|
||||
}
|
||||
exports.injectSeamless = injectSeamless;
|
||||
|
||||
/**
|
||||
* 恢复无缝模式
|
||||
*/
|
||||
async function restoreSeamless() {
|
||||
return request('/api/seamless/restore', 'POST');
|
||||
}
|
||||
exports.restoreSeamless = restoreSeamless;
|
||||
|
||||
/**
|
||||
* 获取无缝账号列表
|
||||
*/
|
||||
async function getSeamlessAccounts() {
|
||||
return request('/api/seamless/accounts');
|
||||
}
|
||||
exports.getSeamlessAccounts = getSeamlessAccounts;
|
||||
|
||||
/**
|
||||
* 同步无缝账号
|
||||
*/
|
||||
async function syncSeamlessAccounts(accounts) {
|
||||
return request('/api/seamless/sync-accounts', 'POST', { accounts });
|
||||
}
|
||||
exports.syncSeamlessAccounts = syncSeamlessAccounts;
|
||||
|
||||
/**
|
||||
* 获取无缝 Token
|
||||
*/
|
||||
async function getSeamlessToken(userKey) {
|
||||
return request('/api/seamless/get-token?userKey=' + encodeURIComponent(userKey));
|
||||
}
|
||||
exports.getSeamlessToken = getSeamlessToken;
|
||||
|
||||
/**
|
||||
* 切换无缝 Token
|
||||
*/
|
||||
async function switchSeamlessToken(userKey) {
|
||||
return request('/api/seamless/switch-token', 'POST', {
|
||||
mode: 'manual',
|
||||
userKey: userKey
|
||||
});
|
||||
}
|
||||
exports.switchSeamlessToken = switchSeamlessToken;
|
||||
|
||||
/**
|
||||
* 获取最新版本
|
||||
*/
|
||||
async function getLatestVersion() {
|
||||
return request('/api/version');
|
||||
}
|
||||
exports.getLatestVersion = getLatestVersion;
|
||||
221
deobfuscated_full/extension/out/extension.js
Normal file
221
deobfuscated_full/extension/out/extension.js
Normal file
@@ -0,0 +1,221 @@
|
||||
'use strict';
|
||||
|
||||
// ============================================
|
||||
// CursorPro Extension - 反混淆版本
|
||||
// ============================================
|
||||
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
|
||||
const vscode = require('vscode');
|
||||
const provider_1 = require('./webview/provider');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
let usageStatusBarItem;
|
||||
|
||||
// 创建输出通道
|
||||
exports.outputChannel = vscode.window.createOutputChannel('CursorPro');
|
||||
|
||||
/**
|
||||
* 日志函数
|
||||
*/
|
||||
function log(message) {
|
||||
const timestamp = new Date().toLocaleTimeString();
|
||||
exports.outputChannel.appendLine('[' + timestamp + '] ' + message);
|
||||
console.log('[CursorPro] ' + message);
|
||||
}
|
||||
exports.log = log;
|
||||
|
||||
/**
|
||||
* 清理 Service Worker 缓存
|
||||
*/
|
||||
function cleanServiceWorkerCache() {
|
||||
try {
|
||||
const platform = process.platform;
|
||||
const cachePaths = [];
|
||||
|
||||
if (platform === 'win32') {
|
||||
const appData = process.env.APPDATA || '';
|
||||
const localAppData = process.env.LOCALAPPDATA || '';
|
||||
cachePaths.push(
|
||||
path.join(appData, 'Cursor', 'Service Worker'),
|
||||
path.join(localAppData, 'Cursor', 'Service Worker'),
|
||||
path.join(appData, 'Cursor', 'GPUCache'),
|
||||
path.join(localAppData, 'Cursor', 'GPUCache')
|
||||
);
|
||||
} else if (platform === 'darwin') {
|
||||
const home = process.env.HOME || '';
|
||||
cachePaths.push(
|
||||
path.join(home, 'Library', 'Application Support', 'Cursor', 'Service Worker'),
|
||||
path.join(home, 'Library', 'Caches', 'Cursor', 'Service Worker')
|
||||
);
|
||||
} else {
|
||||
const home = process.env.HOME || '';
|
||||
cachePaths.push(
|
||||
path.join(home, '.config', 'Cursor', 'Service Worker'),
|
||||
path.join(home, '.cache', 'Cursor', 'Service Worker')
|
||||
);
|
||||
}
|
||||
|
||||
for (const cachePath of cachePaths) {
|
||||
if (!fs.existsSync(cachePath)) continue;
|
||||
|
||||
// 清理 ScriptCache
|
||||
const scriptCachePath = path.join(cachePath, 'ScriptCache');
|
||||
if (fs.existsSync(scriptCachePath)) {
|
||||
try {
|
||||
const files = fs.readdirSync(scriptCachePath);
|
||||
for (const file of files) {
|
||||
try {
|
||||
fs.unlinkSync(path.join(scriptCachePath, file));
|
||||
} catch (e) {}
|
||||
}
|
||||
console.log('[CursorPro] Service Worker ScriptCache 已清理:', scriptCachePath);
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
// 清理 CacheStorage
|
||||
const cacheStoragePath = path.join(cachePath, 'CacheStorage');
|
||||
if (fs.existsSync(cacheStoragePath)) {
|
||||
try {
|
||||
deleteFolderRecursive(cacheStoragePath);
|
||||
console.log('[CursorPro] Service Worker CacheStorage 已清理:', cacheStoragePath);
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
// 清理 Database
|
||||
const databasePath = path.join(cachePath, 'Database');
|
||||
if (fs.existsSync(databasePath)) {
|
||||
try {
|
||||
deleteFolderRecursive(databasePath);
|
||||
console.log('[CursorPro] Service Worker Database 已清理:', databasePath);
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('[CursorPro] 清理 Service Worker 缓存时出错:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归删除文件夹
|
||||
*/
|
||||
function deleteFolderRecursive(folderPath) {
|
||||
if (fs.existsSync(folderPath)) {
|
||||
fs.readdirSync(folderPath).forEach(file => {
|
||||
const curPath = path.join(folderPath, file);
|
||||
if (fs.lstatSync(curPath).isDirectory()) {
|
||||
deleteFolderRecursive(curPath);
|
||||
} else {
|
||||
try {
|
||||
fs.unlinkSync(curPath);
|
||||
} catch (e) {}
|
||||
}
|
||||
});
|
||||
try {
|
||||
fs.rmdirSync(folderPath);
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 激活扩展
|
||||
*/
|
||||
function activate(context) {
|
||||
// 清理 Service Worker 缓存
|
||||
cleanServiceWorkerCache();
|
||||
|
||||
// 创建 WebView Provider
|
||||
const viewProvider = new provider_1.CursorProViewProvider(context.extensionUri, context);
|
||||
|
||||
// 注册 WebView
|
||||
context.subscriptions.push(
|
||||
vscode.window.registerWebviewViewProvider('cursorpro.mainView', viewProvider)
|
||||
);
|
||||
|
||||
// 创建状态栏项
|
||||
usageStatusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100);
|
||||
usageStatusBarItem.text = '$(dashboard) 用量: --';
|
||||
usageStatusBarItem.tooltip = '点击查看账号用量详情';
|
||||
usageStatusBarItem.command = 'cursorpro.showPanel';
|
||||
usageStatusBarItem.backgroundColor = new vscode.ThemeColor('statusBarItem.prominentBackground');
|
||||
|
||||
// 如果有保存的 key,显示状态栏
|
||||
const savedKey = context.globalState.get('cursorpro.key');
|
||||
if (savedKey) {
|
||||
usageStatusBarItem.show();
|
||||
}
|
||||
|
||||
context.subscriptions.push(usageStatusBarItem);
|
||||
|
||||
// 设置同步的键
|
||||
context.globalState.setKeysForSync(['cursorpro.key']);
|
||||
|
||||
// 注册显示面板命令
|
||||
context.subscriptions.push(
|
||||
vscode.commands.registerCommand('cursorpro.showPanel', () => {
|
||||
vscode.commands.executeCommand('cursorpro.mainView.focus');
|
||||
})
|
||||
);
|
||||
}
|
||||
exports.activate = activate;
|
||||
|
||||
/**
|
||||
* 停用扩展
|
||||
*/
|
||||
function deactivate() {
|
||||
console.log('CursorPro 插件已停用');
|
||||
}
|
||||
exports.deactivate = deactivate;
|
||||
|
||||
/**
|
||||
* 显示状态栏
|
||||
*/
|
||||
function showStatusBar() {
|
||||
if (usageStatusBarItem) {
|
||||
usageStatusBarItem.show();
|
||||
}
|
||||
}
|
||||
exports.showStatusBar = showStatusBar;
|
||||
|
||||
/**
|
||||
* 隐藏状态栏
|
||||
*/
|
||||
function hideStatusBar() {
|
||||
if (usageStatusBarItem) {
|
||||
usageStatusBarItem.hide();
|
||||
}
|
||||
}
|
||||
exports.hideStatusBar = hideStatusBar;
|
||||
|
||||
/**
|
||||
* 更新用量状态栏
|
||||
* @param {number} requestCount - 请求次数
|
||||
* @param {number|string} usageCost - 已用额度
|
||||
*/
|
||||
function updateUsageStatusBar(requestCount, usageCost) {
|
||||
if (usageStatusBarItem) {
|
||||
const count = typeof requestCount === 'number' ? requestCount : requestCount;
|
||||
const cost = typeof usageCost === 'number' ? usageCost : parseFloat(usageCost.toString().replace('$', '')) || 0;
|
||||
const costDisplay = typeof usageCost === 'number' ? '$' + usageCost.toFixed(2) : usageCost;
|
||||
|
||||
usageStatusBarItem.text = '$(dashboard) ' + count + '次 | ' + costDisplay;
|
||||
usageStatusBarItem.tooltip = '请求次数: ' + count + '\n已用额度: ' + costDisplay + '\n点击查看详情';
|
||||
|
||||
// 根据用量设置颜色
|
||||
if (cost >= 10) {
|
||||
// 高用量 - 红色警告
|
||||
usageStatusBarItem.backgroundColor = new vscode.ThemeColor('statusBarItem.errorBackground');
|
||||
usageStatusBarItem.color = undefined;
|
||||
} else if (cost >= 5) {
|
||||
// 中用量 - 黄色警告
|
||||
usageStatusBarItem.backgroundColor = new vscode.ThemeColor('statusBarItem.warningBackground');
|
||||
usageStatusBarItem.color = undefined;
|
||||
} else {
|
||||
// 低用量 - 绿色
|
||||
usageStatusBarItem.backgroundColor = undefined;
|
||||
usageStatusBarItem.color = '#4ade80';
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.updateUsageStatusBar = updateUsageStatusBar;
|
||||
213
deobfuscated_full/extension/out/utils/account.js
Normal file
213
deobfuscated_full/extension/out/utils/account.js
Normal file
@@ -0,0 +1,213 @@
|
||||
'use strict';
|
||||
|
||||
// ============================================
|
||||
// CursorPro Account Utils - 反混淆版本
|
||||
// ============================================
|
||||
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
|
||||
const vscode = require('vscode');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const child_process = require('child_process');
|
||||
const util = require('util');
|
||||
const sqlite_1 = require('./sqlite');
|
||||
|
||||
const execAsync = util.promisify(child_process.exec);
|
||||
|
||||
/**
|
||||
* 获取 Cursor 相关路径
|
||||
* @returns {{dbPath: string, storagePath: string, machineidPath: string}}
|
||||
*/
|
||||
function getCursorPaths() {
|
||||
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
||||
|
||||
if (process.platform === 'win32') {
|
||||
const appData = process.env.APPDATA || '';
|
||||
return {
|
||||
dbPath: path.join(appData, 'Cursor', 'User', 'globalStorage', 'state.vscdb'),
|
||||
storagePath: path.join(appData, 'Cursor', 'User', 'globalStorage', 'storage.json'),
|
||||
machineidPath: path.join(appData, 'Cursor', 'machineid')
|
||||
};
|
||||
} else if (process.platform === 'darwin') {
|
||||
return {
|
||||
dbPath: path.join(homeDir, 'Library', 'Application Support', 'Cursor', 'User', 'globalStorage', 'state.vscdb'),
|
||||
storagePath: path.join(homeDir, 'Library', 'Application Support', 'Cursor', 'User', 'globalStorage', 'storage.json'),
|
||||
machineidPath: path.join(homeDir, 'Library', 'Application Support', 'Cursor', 'machineid')
|
||||
};
|
||||
} else {
|
||||
// Linux
|
||||
return {
|
||||
dbPath: path.join(homeDir, '.config', 'Cursor', 'User', 'globalStorage', 'state.vscdb'),
|
||||
storagePath: path.join(homeDir, '.config', 'Cursor', 'User', 'globalStorage', 'storage.json'),
|
||||
machineidPath: path.join(homeDir, '.config', 'Cursor', 'machineid')
|
||||
};
|
||||
}
|
||||
}
|
||||
exports.getCursorPaths = getCursorPaths;
|
||||
|
||||
/**
|
||||
* 将账号数据写入本地存储
|
||||
* @param {Object} accountData - 账号数据
|
||||
* @param {string} accountData.accessToken - 访问令牌
|
||||
* @param {string} accountData.refreshToken - 刷新令牌
|
||||
* @param {string} accountData.workosSessionToken - WorkOS 会话令牌
|
||||
* @param {string} accountData.email - 邮箱
|
||||
* @param {string} accountData.membership_type - 会员类型
|
||||
* @param {string} accountData.machineId - 机器 ID
|
||||
* @param {string} accountData.macMachineId - Mac 机器 ID
|
||||
* @param {string} accountData.devDeviceId - 开发设备 ID
|
||||
* @param {string} accountData.serviceMachineId - 服务机器 ID
|
||||
* @returns {Promise<boolean>}
|
||||
*/
|
||||
async function writeAccountToLocal(accountData) {
|
||||
try {
|
||||
const cursorPaths = getCursorPaths();
|
||||
const { dbPath, storagePath, machineidPath } = cursorPaths;
|
||||
|
||||
console.log('[CursorPro] 数据库路径:', dbPath);
|
||||
console.log('[CursorPro] 数据库存在:', fs.existsSync(dbPath));
|
||||
console.log('[CursorPro] 账号数据:', JSON.stringify({
|
||||
hasAccessToken: !!accountData.accessToken,
|
||||
hasRefreshToken: !!accountData.refreshToken,
|
||||
hasWorkosToken: !!accountData.workosSessionToken,
|
||||
email: accountData.email
|
||||
}));
|
||||
|
||||
// 写入数据库
|
||||
if (fs.existsSync(dbPath)) {
|
||||
try {
|
||||
const entries = [];
|
||||
|
||||
if (accountData.accessToken) {
|
||||
entries.push(['cursorAuth/accessToken', accountData.accessToken]);
|
||||
}
|
||||
|
||||
if (accountData.refreshToken) {
|
||||
entries.push(['cursorAuth/refreshToken', accountData.refreshToken]);
|
||||
}
|
||||
|
||||
if (accountData.workosSessionToken) {
|
||||
entries.push(['cursorAuth/WorkosCursorSessionToken', accountData.workosSessionToken]);
|
||||
}
|
||||
|
||||
if (accountData.email) {
|
||||
entries.push(['cursorAuth/cachedEmail', accountData.email]);
|
||||
}
|
||||
|
||||
if (accountData.membership_type) {
|
||||
entries.push(['cursorAuth/stripeMembershipType', accountData.membership_type]);
|
||||
}
|
||||
|
||||
if (accountData.devDeviceId) {
|
||||
entries.push(['telemetry.devDeviceId', accountData.devDeviceId || 'default']);
|
||||
}
|
||||
|
||||
if (accountData.serviceMachineId) {
|
||||
entries.push(['serviceMachineId', accountData.serviceMachineId]);
|
||||
}
|
||||
|
||||
console.log('[CursorPro] 准备写入', entries.length, '个字段');
|
||||
|
||||
const success = await sqlite_1.sqliteSetBatch(dbPath, entries);
|
||||
if (!success) {
|
||||
throw new Error('数据库写入失败');
|
||||
}
|
||||
|
||||
console.log('[CursorPro] 已写入', entries.length, '个字段');
|
||||
} catch (error) {
|
||||
console.error('[CursorPro] 数据库写入错误:', error);
|
||||
vscode.window.showErrorMessage('数据库写入失败: ' + error);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
console.error('[CursorPro] 数据库文件不存在:', dbPath);
|
||||
vscode.window.showErrorMessage('[CursorPro] 数据库文件不存在');
|
||||
return false;
|
||||
}
|
||||
|
||||
// 更新 storage.json
|
||||
if (fs.existsSync(storagePath)) {
|
||||
const storageData = JSON.parse(fs.readFileSync(storagePath, 'utf-8'));
|
||||
|
||||
if (accountData.machineId) {
|
||||
storageData['telemetry.machineId'] = accountData.machineId;
|
||||
}
|
||||
|
||||
if (accountData.macMachineId) {
|
||||
storageData['telemetry.macMachineId'] = accountData.macMachineId;
|
||||
}
|
||||
|
||||
if (accountData.devDeviceId) {
|
||||
storageData['telemetry.devDeviceId'] = accountData.devDeviceId;
|
||||
}
|
||||
|
||||
if (accountData.serviceMachineId) {
|
||||
storageData['serviceMachineId'] = accountData.serviceMachineId;
|
||||
}
|
||||
|
||||
fs.writeFileSync(storagePath, JSON.stringify(storageData, null, 4));
|
||||
console.log('[CursorPro] storage.json 已更新');
|
||||
}
|
||||
|
||||
// 更新 machineid 文件
|
||||
if (accountData.machineId && machineidPath) {
|
||||
const machineIdDir = path.dirname(machineidPath);
|
||||
if (!fs.existsSync(machineIdDir)) {
|
||||
fs.mkdirSync(machineIdDir, { recursive: true });
|
||||
}
|
||||
fs.writeFileSync(machineidPath, accountData.machineId);
|
||||
console.log('[CursorPro] machineid 文件已更新');
|
||||
}
|
||||
|
||||
// Windows: 更新注册表 (如果提供了 devDeviceId)
|
||||
if (accountData.devDeviceId && process.platform === 'win32') {
|
||||
try {
|
||||
const regCommand = 'reg add "HKCU\\Software\\Cursor" /v devDeviceId /t REG_SZ /d "' + accountData.devDeviceId + '" /f';
|
||||
await execAsync(regCommand);
|
||||
console.log('[CursorPro] 注册表已更新');
|
||||
} catch (error) {
|
||||
console.warn('[CursorPro] 注册表写入失败(可能需要管理员权限):', error);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('[CursorPro] writeAccountToLocal 错误:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
exports.writeAccountToLocal = writeAccountToLocal;
|
||||
|
||||
/**
|
||||
* 关闭 Cursor 进程
|
||||
*/
|
||||
async function closeCursor() {
|
||||
try {
|
||||
if (process.platform === 'win32') {
|
||||
await execAsync('taskkill /F /IM Cursor.exe').catch(() => {});
|
||||
} else {
|
||||
await execAsync('pkill -9 -f Cursor').catch(() => {});
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('[CursorPro] 关闭 Cursor 失败:', error);
|
||||
}
|
||||
}
|
||||
exports.closeCursor = closeCursor;
|
||||
|
||||
/**
|
||||
* 提示重启 Cursor
|
||||
* @param {string} message - 提示消息
|
||||
*/
|
||||
async function promptRestartCursor(message) {
|
||||
const selection = await vscode.window.showInformationMessage(
|
||||
message,
|
||||
'立即重启',
|
||||
'稍后'
|
||||
);
|
||||
|
||||
if (selection === '立即重启') {
|
||||
await closeCursor();
|
||||
}
|
||||
}
|
||||
exports.promptRestartCursor = promptRestartCursor;
|
||||
176
deobfuscated_full/extension/out/utils/sqlite.js
Normal file
176
deobfuscated_full/extension/out/utils/sqlite.js
Normal file
@@ -0,0 +1,176 @@
|
||||
'use strict';
|
||||
|
||||
// ============================================
|
||||
// CursorPro SQLite Utils - 反混淆版本
|
||||
// ============================================
|
||||
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
|
||||
const child_process = require('child_process');
|
||||
const util = require('util');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const os = require('os');
|
||||
|
||||
const execAsync = util.promisify(child_process.exec);
|
||||
|
||||
/**
|
||||
* 转义 SQL 字符串中的单引号
|
||||
*/
|
||||
function escapeSqlString(value) {
|
||||
if (value === null || value === undefined) {
|
||||
return '';
|
||||
}
|
||||
return String(value).replace(/'/g, "''");
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行 SQLite 命令
|
||||
*/
|
||||
async function execSqlite(dbPath, sql) {
|
||||
const isWindows = process.platform === 'win32';
|
||||
|
||||
try {
|
||||
if (isWindows) {
|
||||
// Windows: 直接使用 sqlite3 命令
|
||||
const escapedSql = sql.replace(/"/g, '\\"');
|
||||
const command = `sqlite3 "${dbPath}" "${escapedSql}"`;
|
||||
const { stdout, stderr } = await execAsync(command, {
|
||||
encoding: 'utf-8',
|
||||
maxBuffer: 10 * 1024 * 1024
|
||||
});
|
||||
|
||||
if (stderr && !stderr.includes('-- Loading')) {
|
||||
console.warn('[SQLite] stderr:', stderr);
|
||||
}
|
||||
|
||||
return stdout.trim();
|
||||
} else {
|
||||
// Unix/Mac: 使用临时文件避免命令行转义问题
|
||||
const tmpFile = path.join(os.tmpdir(), 'cursor_sql_' + Date.now() + '.sql');
|
||||
fs.writeFileSync(tmpFile, sql, 'utf-8');
|
||||
|
||||
try {
|
||||
const command = `sqlite3 "${dbPath}" < "${tmpFile}"`;
|
||||
const { stdout, stderr } = await execAsync(command, {
|
||||
encoding: 'utf-8',
|
||||
maxBuffer: 10 * 1024 * 1024,
|
||||
shell: '/bin/bash'
|
||||
});
|
||||
|
||||
if (stderr && !stderr.includes('-- Loading')) {
|
||||
console.warn('[SQLite] stderr:', stderr);
|
||||
}
|
||||
|
||||
return stdout.trim();
|
||||
} finally {
|
||||
try {
|
||||
fs.unlinkSync(tmpFile);
|
||||
} catch (e) {
|
||||
// 忽略删除临时文件失败
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
// 检查是否是 sqlite3 不存在的错误
|
||||
if (error.code === 'ENOENT' ||
|
||||
error.message?.includes('not found') ||
|
||||
error.message?.includes('not recognized')) {
|
||||
throw new Error('sqlite3 命令未找到,请确保已安装 sqlite3');
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 SQLite 数据库读取值
|
||||
*/
|
||||
async function sqliteGet(dbPath, key) {
|
||||
if (!fs.existsSync(dbPath)) {
|
||||
console.warn('[SQLite] 数据库文件不存在:', dbPath);
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
const sql = `SELECT value FROM ItemTable WHERE key = '${escapeSqlString(key)}';`;
|
||||
const result = await execSqlite(dbPath, sql);
|
||||
return result || null;
|
||||
} catch (error) {
|
||||
console.error('[SQLite] 读取失败:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
exports.sqliteGet = sqliteGet;
|
||||
|
||||
/**
|
||||
* 向 SQLite 数据库写入值
|
||||
*/
|
||||
async function sqliteSet(dbPath, key, value) {
|
||||
if (!fs.existsSync(dbPath)) {
|
||||
console.warn('[SQLite] 数据库文件不存在:', dbPath);
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
const sql = `INSERT OR REPLACE INTO ItemTable (key, value) VALUES ('${escapeSqlString(key)}', '${escapeSqlString(value)}');`;
|
||||
await execSqlite(dbPath, sql);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('[SQLite] 写入失败:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
exports.sqliteSet = sqliteSet;
|
||||
|
||||
/**
|
||||
* 批量写入 SQLite 数据库
|
||||
*/
|
||||
async function sqliteSetBatch(dbPath, entries) {
|
||||
if (!fs.existsSync(dbPath)) {
|
||||
console.warn('[SQLite] 数据库文件不存在:', dbPath);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (entries.length === 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
const statements = entries.map(([key, value]) =>
|
||||
`INSERT OR REPLACE INTO ItemTable (key, value) VALUES ('${escapeSqlString(key)}', '${escapeSqlString(value)}');`
|
||||
);
|
||||
const sql = 'BEGIN; ' + statements.join(' ') + ' COMMIT;';
|
||||
await execSqlite(dbPath, sql);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('[SQLite] 批量写入失败:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
exports.sqliteSetBatch = sqliteSetBatch;
|
||||
|
||||
/**
|
||||
* 批量读取 SQLite 数据库
|
||||
*/
|
||||
async function sqliteGetBatch(dbPath, keys) {
|
||||
const result = new Map();
|
||||
|
||||
if (!fs.existsSync(dbPath)) {
|
||||
console.warn('[SQLite] 数据库文件不存在:', dbPath);
|
||||
keys.forEach(key => result.set(key, null));
|
||||
return result;
|
||||
}
|
||||
|
||||
try {
|
||||
for (const key of keys) {
|
||||
const value = await sqliteGet(dbPath, key);
|
||||
result.set(key, value);
|
||||
}
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error('[SQLite] 批量读取失败:', error);
|
||||
keys.forEach(key => result.set(key, null));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
exports.sqliteGetBatch = sqliteGetBatch;
|
||||
1989
deobfuscated_full/extension/out/webview/provider.js
Normal file
1989
deobfuscated_full/extension/out/webview/provider.js
Normal file
File diff suppressed because one or more lines are too long
4478
deobfuscated_full/extension/out/webview/provider_clean.js
Normal file
4478
deobfuscated_full/extension/out/webview/provider_clean.js
Normal file
File diff suppressed because one or more lines are too long
4307
deobfuscated_full/extension/out/webview/provider_cleaned.js
Normal file
4307
deobfuscated_full/extension/out/webview/provider_cleaned.js
Normal file
File diff suppressed because one or more lines are too long
6276
deobfuscated_full/extension/out/webview/provider_deob.js
Normal file
6276
deobfuscated_full/extension/out/webview/provider_deob.js
Normal file
File diff suppressed because one or more lines are too long
3036
deobfuscated_full/extension/out/webview/provider_final.js
Normal file
3036
deobfuscated_full/extension/out/webview/provider_final.js
Normal file
File diff suppressed because one or more lines are too long
4308
deobfuscated_full/extension/out/webview/provider_readable.js
Normal file
4308
deobfuscated_full/extension/out/webview/provider_readable.js
Normal file
File diff suppressed because one or more lines are too long
3067
deobfuscated_full/extension/out/webview/provider_simplified.js
Normal file
3067
deobfuscated_full/extension/out/webview/provider_simplified.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user