@ranger-testing/ranger-cli 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +281 -0
- package/build/cli.js +168 -1
- package/build/cli.js.map +1 -0
- package/build/commands/addEnv.js +1 -110
- package/build/commands/addEnv.js.map +1 -0
- package/build/commands/authEncrypt.js +40 -0
- package/build/commands/authEncrypt.js.map +1 -0
- package/build/commands/clean.js +1 -0
- package/build/commands/clean.js.map +1 -0
- package/build/commands/config.js +100 -0
- package/build/commands/config.js.map +1 -0
- package/build/commands/dataMcpServer.js +1 -0
- package/build/commands/dataMcpServer.js.map +1 -0
- package/build/commands/index.js +6 -0
- package/build/commands/index.js.map +1 -0
- package/build/commands/skillup.js +112 -0
- package/build/commands/skillup.js.map +1 -0
- package/build/commands/start.js +1 -72
- package/build/commands/start.js.map +1 -0
- package/build/commands/status.js +221 -0
- package/build/commands/status.js.map +1 -0
- package/build/commands/update.js +127 -0
- package/build/commands/update.js.map +1 -0
- package/build/commands/updateEnv.js +1 -64
- package/build/commands/updateEnv.js.map +1 -0
- package/build/commands/useEnv.js +1 -28
- package/build/commands/useEnv.js.map +1 -0
- package/build/commands/utils/browserSessionsApi.js +1 -0
- package/build/commands/utils/browserSessionsApi.js.map +1 -0
- package/build/commands/utils/crypto.js +42 -0
- package/build/commands/utils/crypto.js.map +1 -0
- package/build/commands/utils/keychain.js +1 -0
- package/build/commands/utils/keychain.js.map +1 -0
- package/build/commands/utils/localAgentInstallationsApi.js +1 -0
- package/build/commands/utils/localAgentInstallationsApi.js.map +1 -0
- package/build/commands/utils/mcpConfig.js +1 -47
- package/build/commands/utils/mcpConfig.js.map +1 -0
- package/build/commands/utils/reportGenerator.js +130 -0
- package/build/commands/utils/reportGenerator.js.map +1 -0
- package/build/commands/utils/settings.js +246 -0
- package/build/commands/utils/settings.js.map +1 -0
- package/build/commands/utils/skills.js +1 -0
- package/build/commands/utils/skills.js.map +1 -0
- package/build/commands/verifyInBrowser.js +1 -0
- package/build/commands/verifyInBrowser.js.map +1 -0
- package/build/skills/bug-bash.md +313 -0
- package/build/skills/e2e-test-recommender.md +173 -0
- package/package.json +7 -4
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { execSync, spawn } from 'child_process';
|
|
2
|
+
import { readFileSync, readdirSync, existsSync } from 'fs';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { dirname, join } from 'path';
|
|
5
|
+
import { installSkill } from './utils/skills.js';
|
|
6
|
+
const PACKAGE_NAME = '@ranger-testing/ranger-cli';
|
|
7
|
+
function getCurrentVersion() {
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
const packageJsonPath = join(__dirname, '..', '..', 'package.json');
|
|
11
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
12
|
+
return packageJson.version;
|
|
13
|
+
}
|
|
14
|
+
function getLatestVersion() {
|
|
15
|
+
try {
|
|
16
|
+
const result = execSync(`npm view ${PACKAGE_NAME} version`, {
|
|
17
|
+
encoding: 'utf-8',
|
|
18
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
19
|
+
});
|
|
20
|
+
return result.trim();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function compareVersions(current, latest) {
|
|
27
|
+
const currentParts = current.split('.').map(Number);
|
|
28
|
+
const latestParts = latest.split('.').map(Number);
|
|
29
|
+
for (let i = 0; i < 3; i++) {
|
|
30
|
+
const c = currentParts[i] || 0;
|
|
31
|
+
const l = latestParts[i] || 0;
|
|
32
|
+
if (l > c)
|
|
33
|
+
return 1;
|
|
34
|
+
if (l < c)
|
|
35
|
+
return -1;
|
|
36
|
+
}
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
async function runInstall() {
|
|
40
|
+
return new Promise((resolve) => {
|
|
41
|
+
console.log(`\nInstalling ${PACKAGE_NAME}@latest...\n`);
|
|
42
|
+
const child = spawn('npm', ['install', '-g', `${PACKAGE_NAME}@latest`], {
|
|
43
|
+
stdio: 'inherit',
|
|
44
|
+
shell: true,
|
|
45
|
+
});
|
|
46
|
+
child.on('close', (code) => {
|
|
47
|
+
resolve(code === 0);
|
|
48
|
+
});
|
|
49
|
+
child.on('error', () => {
|
|
50
|
+
resolve(false);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get list of installed skills in .claude/skills directory
|
|
56
|
+
*/
|
|
57
|
+
function getInstalledSkills() {
|
|
58
|
+
const skillsDir = join(process.cwd(), '.claude', 'skills');
|
|
59
|
+
if (!existsSync(skillsDir)) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const entries = readdirSync(skillsDir, { withFileTypes: true });
|
|
64
|
+
return entries
|
|
65
|
+
.filter((entry) => entry.isDirectory())
|
|
66
|
+
.map((entry) => entry.name);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.warn('Failed to read .claude/skills directory:', error);
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Reinstall all skills found in .claude/skills directory
|
|
75
|
+
* This ensures skill content is always up to date, even if CLI version hasn't changed
|
|
76
|
+
*/
|
|
77
|
+
async function reinstallSkills(cliVersion) {
|
|
78
|
+
const installedSkills = getInstalledSkills();
|
|
79
|
+
if (installedSkills.length === 0) {
|
|
80
|
+
console.log('\nNo skills found to reinstall.');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
console.log(`\nReinstalling ${installedSkills.length} skill(s) to ensure content is up to date...`);
|
|
84
|
+
for (const skillName of installedSkills) {
|
|
85
|
+
try {
|
|
86
|
+
await installSkill(skillName, cliVersion);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
console.warn(` Failed to reinstall ${skillName}:`, error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export async function update() {
|
|
94
|
+
const currentVersion = getCurrentVersion();
|
|
95
|
+
console.log(`\nCurrent version: ${currentVersion}`);
|
|
96
|
+
console.log('Checking for updates...');
|
|
97
|
+
const latestVersion = getLatestVersion();
|
|
98
|
+
if (!latestVersion) {
|
|
99
|
+
console.log('\nFailed to check for updates. Please check your network connection.');
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
console.log(`Latest version: ${latestVersion}`);
|
|
103
|
+
const comparison = compareVersions(currentVersion, latestVersion);
|
|
104
|
+
let versionToUse = currentVersion;
|
|
105
|
+
if (comparison === 0) {
|
|
106
|
+
console.log('\nYou are already on the latest version.');
|
|
107
|
+
}
|
|
108
|
+
else if (comparison < 0) {
|
|
109
|
+
console.log(`\nYour version (${currentVersion}) is newer than the published version (${latestVersion}).`);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const success = await runInstall();
|
|
113
|
+
if (success) {
|
|
114
|
+
console.log(`\nSuccessfully updated to version ${latestVersion}`);
|
|
115
|
+
versionToUse = latestVersion;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
console.log('\nUpdate failed. You may need to run with sudo:');
|
|
119
|
+
console.log(` sudo npm install -g ${PACKAGE_NAME}@latest`);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Reinstall all skills to ensure they are up to date
|
|
124
|
+
await reinstallSkills(versionToUse);
|
|
125
|
+
console.log('\n✅ Update complete!');
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,64 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { join } from 'path';
|
|
3
|
-
import { existsSync } from 'fs';
|
|
4
|
-
import { chromium } from 'playwright';
|
|
5
|
-
import { installAgent } from './utils/agents.js';
|
|
6
|
-
export async function updateEnv(envName) {
|
|
7
|
-
const envDir = join(process.cwd(), '.ranger', envName);
|
|
8
|
-
const configPath = join(envDir, 'config.json');
|
|
9
|
-
const authPath = join(envDir, 'auth.json');
|
|
10
|
-
// Check if env exists
|
|
11
|
-
if (!existsSync(envDir)) {
|
|
12
|
-
console.error(`\nEnvironment "${envName}" not found.`);
|
|
13
|
-
console.error(` Run first: ranger add env ${envName}`);
|
|
14
|
-
process.exit(1);
|
|
15
|
-
}
|
|
16
|
-
// Check if config exists
|
|
17
|
-
if (!existsSync(configPath)) {
|
|
18
|
-
console.error(`\nConfig not found at ${configPath}`);
|
|
19
|
-
console.error(` Run first: ranger add env ${envName}`);
|
|
20
|
-
process.exit(1);
|
|
21
|
-
}
|
|
22
|
-
// Load existing config
|
|
23
|
-
const configContent = await readFile(configPath, 'utf-8');
|
|
24
|
-
const config = JSON.parse(configContent);
|
|
25
|
-
// Check if existing auth state exists
|
|
26
|
-
const hasExistingAuth = existsSync(authPath);
|
|
27
|
-
console.log('\n📋 Authentication Update');
|
|
28
|
-
console.log(' A browser will open with your existing session (if any).');
|
|
29
|
-
console.log(' Update your authentication as needed.');
|
|
30
|
-
console.log(' When you are done, close the browser.\n');
|
|
31
|
-
// Launch Playwright browser with existing storage state if available
|
|
32
|
-
const browser = await chromium.launch({ headless: false });
|
|
33
|
-
const contextOptions = hasExistingAuth ? { storageState: authPath } : {};
|
|
34
|
-
const context = await browser.newContext(contextOptions);
|
|
35
|
-
const page = await context.newPage();
|
|
36
|
-
await page.goto('about:blank');
|
|
37
|
-
// Wait for browser to be closed by user
|
|
38
|
-
await new Promise((resolve) => {
|
|
39
|
-
page.on('close', async () => {
|
|
40
|
-
try {
|
|
41
|
-
console.log('Saving authentication state...');
|
|
42
|
-
await context.storageState({ path: authPath });
|
|
43
|
-
resolve();
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
// Context may already be closed
|
|
47
|
-
resolve();
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
await browser.close();
|
|
52
|
-
console.log(`\n✓ Auth state saved to: ${authPath}`);
|
|
53
|
-
// Update config to reference the auth file
|
|
54
|
-
config.browser = config.browser || {};
|
|
55
|
-
config.browser.contextOptions = config.browser.contextOptions || {};
|
|
56
|
-
config.browser.contextOptions.storageState = authPath;
|
|
57
|
-
await writeFile(configPath, JSON.stringify(config, null, 2));
|
|
58
|
-
console.log(`✓ Updated config: ${configPath}`);
|
|
59
|
-
console.log(`\n✅ Environment "${envName}" authentication updated`);
|
|
60
|
-
// Copy browser-based agents to .claude/agents
|
|
61
|
-
await installAgent('quality-advocate');
|
|
62
|
-
await installAgent('bug-basher');
|
|
63
|
-
await installAgent('ui-verifier');
|
|
64
|
-
}
|
|
1
|
+
(function(_0x41c926,_0x160113){const _0x373835=_0x515b,_0x222fdf=_0x41c926();while(!![]){try{const _0x35cd7b=-parseInt(_0x373835(0xf9))/0x1*(parseInt(_0x373835(0x102))/0x2)+-parseInt(_0x373835(0x109))/0x3+parseInt(_0x373835(0x11b))/0x4+parseInt(_0x373835(0xfa))/0x5*(parseInt(_0x373835(0x101))/0x6)+parseInt(_0x373835(0xf3))/0x7*(-parseInt(_0x373835(0x10e))/0x8)+parseInt(_0x373835(0x10b))/0x9+parseInt(_0x373835(0xfd))/0xa*(parseInt(_0x373835(0x103))/0xb);if(_0x35cd7b===_0x160113)break;else _0x222fdf['push'](_0x222fdf['shift']());}catch(_0x4d23c9){_0x222fdf['push'](_0x222fdf['shift']());}}}(_0x4483,0x50574));import{writeFile,readFile,unlink}from'fs/promises';import{join}from'path';import{existsSync}from'fs';import{chromium}from'playwright';import _0x3e1946 from'inquirer';import{encrypt}from'./utils/crypto.js';import{getToken}from'./utils/keychain.js';function _0x515b(_0x1d6100,_0x352936){_0x1d6100=_0x1d6100-0xf2;const _0x44837e=_0x4483();let _0x515b8a=_0x44837e[_0x1d6100];return _0x515b8a;}function _0x4483(){const _0x67d0e9=['storageState','\x20\x20Set\x20RANGER_API_TOKEN\x20in\x20CI\x20to\x20decrypt\x20at\x20runtime.','799566EmZrbC','7108WQflOd','1538141ykUnYW','\x20\x20Could\x20not\x20encrypt:\x20No\x20API\x20token\x20found\x20in\x20keychain\x20or\x20RANGER_API_TOKEN\x20env\x20var','utf-8','\x22\x20not\x20found.','Encrypt\x20auth\x20state?\x20(Recommended\x20for\x20CI\x20-\x20allows\x20committing\x20to\x20git)','juNVB','1405902pTYJrR','error','5388246fSUIkH','confirm','QxRzb','248ssYpKu','newPage','✓\x20Auth\x20state\x20saved\x20to:\x20','ZTvku','yUBLM','nJMQN','iTksI','stringify','browser','tCeDt','RANGER_API_TOKEN','log','\x20\x20\x20Update\x20your\x20authentication\x20as\x20needed.','50024BuLnfx','MzgrQ','\x0a📋\x20Authentication\x20Update','prompt','contextOptions','auth.json','\x0a✅\x20Environment\x20\x22','110782xvkTQN','\x20\x20\x20Run\x20first:\x20ranger\x20add\x20env\x20','parse','exit','\x22\x20authentication\x20updated','newContext','40rRCoMm','15gKgIrM','\x0aConfig\x20not\x20found\x20at\x20','QZxxq','30uRivRj','lbbmV'];_0x4483=function(){return _0x67d0e9;};return _0x4483();}export async function updateEnv(_0x56edf8){const _0x501354=_0x515b,_0x39ba00={'eBhVA':'Saving\x20authentication\x20state...','iTksI':'close','zONOU':function(_0x2a7d30,_0x3f77dc,_0x2dc948,_0x184004){return _0x2a7d30(_0x3f77dc,_0x2dc948,_0x184004);},'csptT':'.ranger','tCeDt':'config.json','nJMQN':function(_0x5a0434,_0x3917a5,_0x333a2e){return _0x5a0434(_0x3917a5,_0x333a2e);},'kiyUo':_0x501354(0x120),'uQmlS':'.enc','ZTvku':function(_0x226dff,_0x52f60c){return _0x226dff(_0x52f60c);},'rDCub':function(_0x333141,_0x27181b){return _0x333141(_0x27181b);},'QZxxq':_0x501354(0x105),'yUBLM':function(_0x3a7a5b,_0x40b6e1){return _0x3a7a5b(_0x40b6e1);},'EFYBG':_0x501354(0x10c),'nPjUe':'shouldEncrypt','ZSuPK':'Update\x20encrypted\x20auth\x20state?\x20(auth.json.enc\x20exists)','rOrCf':'\x20\x20\x20A\x20browser\x20will\x20open\x20with\x20your\x20existing\x20session\x20(if\x20any).','MzgrQ':'about:blank','vAMBU':function(_0x327eb2,_0x27a99a,_0x5da0b1){return _0x327eb2(_0x27a99a,_0x5da0b1);},'lbbmV':function(_0x5c0492,_0x5a23ec){return _0x5c0492(_0x5a23ec);},'juNVB':'\x20\x20You\x20can\x20safely\x20commit\x20this\x20file\x20to\x20git.','QxRzb':_0x501354(0x100),'DoIwA':function(_0x12b23e,_0x67c5a5,_0x286ee2){return _0x12b23e(_0x67c5a5,_0x286ee2);}},_0x1ec715=_0x39ba00['zONOU'](join,process['cwd'](),_0x39ba00['csptT'],_0x56edf8),_0x3b13ba=join(_0x1ec715,_0x39ba00[_0x501354(0x117)]),_0x182597=_0x39ba00[_0x501354(0x113)](join,_0x1ec715,_0x39ba00['kiyUo']),_0x2eba11=_0x182597+_0x39ba00['uQmlS'];!_0x39ba00[_0x501354(0x111)](existsSync,_0x1ec715)&&(console[_0x501354(0x10a)]('\x0aEnvironment\x20\x22'+_0x56edf8+_0x501354(0x106)),console[_0x501354(0x10a)]('\x20\x20\x20Run\x20first:\x20ranger\x20add\x20env\x20'+_0x56edf8),process[_0x501354(0xf6)](0x1));!_0x39ba00['rDCub'](existsSync,_0x3b13ba)&&(console[_0x501354(0x10a)](_0x501354(0xfb)+_0x3b13ba),console[_0x501354(0x10a)](_0x501354(0xf4)+_0x56edf8),process[_0x501354(0xf6)](0x1));const _0x4eaf2d=await readFile(_0x3b13ba,_0x39ba00[_0x501354(0xfc)]),_0x57cb54=JSON[_0x501354(0xf5)](_0x4eaf2d),_0x213dcf=_0x39ba00[_0x501354(0x112)](existsSync,_0x182597),_0x39576d=existsSync(_0x2eba11),{shouldEncrypt:_0x4d5176}=await _0x3e1946[_0x501354(0x11e)]([{'type':_0x39ba00['EFYBG'],'name':_0x39ba00['nPjUe'],'message':_0x39576d?_0x39ba00['ZSuPK']:_0x501354(0x107),'default':_0x39576d}]);console[_0x501354(0x119)](_0x501354(0x11d)),console[_0x501354(0x119)](_0x39ba00['rOrCf']),console[_0x501354(0x119)](_0x501354(0x11a)),console[_0x501354(0x119)]('\x20\x20\x20When\x20you\x20are\x20done,\x20close\x20the\x20browser.\x0a');const _0x5d6c51=await chromium['launch']({'headless':![]}),_0x140656=_0x213dcf?{'storageState':_0x182597}:{},_0x59fb20=await _0x5d6c51[_0x501354(0xf8)](_0x140656),_0x2c3802=await _0x59fb20[_0x501354(0x10f)]();await _0x2c3802['goto'](_0x39ba00[_0x501354(0x11c)]),await new Promise(_0x4070fc=>{const _0x1dbac9=_0x501354;_0x2c3802['on'](_0x39ba00[_0x1dbac9(0x114)],async()=>{const _0x3835f0=_0x1dbac9;try{console[_0x3835f0(0x119)](_0x39ba00['eBhVA']),await _0x59fb20[_0x3835f0(0xff)]({'path':_0x182597}),_0x4070fc();}catch{_0x4070fc();}});}),await _0x5d6c51['close']();if(_0x4d5176){const _0x253c65=await _0x39ba00['vAMBU'](readFile,_0x182597,_0x39ba00[_0x501354(0xfc)]),_0x2d29ce=process['env'][_0x501354(0x118)]||await getToken();if(!_0x2d29ce)console['error'](_0x501354(0x104)),console['log'](_0x501354(0x110)+_0x182597);else{const _0x15e91e=_0x39ba00['nJMQN'](encrypt,_0x253c65,_0x2d29ce);await _0x39ba00[_0x501354(0x113)](writeFile,_0x2eba11,_0x15e91e),await _0x39ba00[_0x501354(0xfe)](unlink,_0x182597),console[_0x501354(0x119)]('✓\x20Encrypted\x20auth\x20saved\x20to:\x20'+_0x2eba11),console['log'](_0x39ba00[_0x501354(0x108)]),console[_0x501354(0x119)](_0x39ba00[_0x501354(0x10d)]);}}else console['log'](_0x501354(0x110)+_0x182597);_0x57cb54[_0x501354(0x116)]=_0x57cb54['browser']||{},_0x57cb54[_0x501354(0x116)]['contextOptions']=_0x57cb54['browser'][_0x501354(0x11f)]||{},_0x57cb54['browser'][_0x501354(0x11f)]['storageState']=_0x182597,await _0x39ba00['DoIwA'](writeFile,_0x3b13ba,JSON[_0x501354(0x115)](_0x57cb54,null,0x2)),console[_0x501354(0x119)]('✓\x20Updated\x20config:\x20'+_0x3b13ba),console[_0x501354(0x119)](_0x501354(0xf2)+_0x56edf8+_0x501354(0xf7));}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateEnv.js","sourceRoot":"","sources":["../../src/commands/updateEnv.ts"],"names":[],"mappings":"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"}
|
package/build/commands/useEnv.js
CHANGED
|
@@ -1,28 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { existsSync } from 'fs';
|
|
3
|
-
import { loadMcpConfig, saveMcpConfig, setRangerBrowser, } from './utils/mcpConfig.js';
|
|
4
|
-
import { installAgent } from './utils/agents.js';
|
|
5
|
-
export async function useEnv(envName) {
|
|
6
|
-
const envDir = join(process.cwd(), '.ranger', envName);
|
|
7
|
-
const configPath = join(envDir, 'config.json');
|
|
8
|
-
// Check env exists
|
|
9
|
-
if (!existsSync(envDir)) {
|
|
10
|
-
console.error(`\n❌ Environment "${envName}" not found.`);
|
|
11
|
-
console.error(` Run first: ranger add env ${envName}`);
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
|
-
// Check config exists
|
|
15
|
-
if (!existsSync(configPath)) {
|
|
16
|
-
console.error(`\n❌ Config not found at ${configPath}`);
|
|
17
|
-
console.error(` Run first: ranger add env ${envName}`);
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
// Load and update MCP config
|
|
21
|
-
const mcpConfig = await loadMcpConfig();
|
|
22
|
-
setRangerBrowser(mcpConfig, configPath);
|
|
23
|
-
await saveMcpConfig(mcpConfig);
|
|
24
|
-
// Install browser-based agents if they don't exist
|
|
25
|
-
await installAgent('quality-advocate');
|
|
26
|
-
await installAgent('bug-basher');
|
|
27
|
-
console.log(`\n✅ Now using environment "${envName}"`);
|
|
28
|
-
}
|
|
1
|
+
(function(_0xaa8cb3,_0x295cc4){const _0xeaff2b=_0x229f,_0x3ba972=_0xaa8cb3();while(!![]){try{const _0x4e8163=parseInt(_0xeaff2b(0x156))/0x1+-parseInt(_0xeaff2b(0x161))/0x2+parseInt(_0xeaff2b(0x154))/0x3+-parseInt(_0xeaff2b(0x159))/0x4*(parseInt(_0xeaff2b(0x163))/0x5)+parseInt(_0xeaff2b(0x15a))/0x6+parseInt(_0xeaff2b(0x15d))/0x7*(parseInt(_0xeaff2b(0x160))/0x8)+-parseInt(_0xeaff2b(0x158))/0x9*(-parseInt(_0xeaff2b(0x15c))/0xa);if(_0x4e8163===_0x295cc4)break;else _0x3ba972['push'](_0x3ba972['shift']());}catch(_0x3d4db6){_0x3ba972['push'](_0x3ba972['shift']());}}}(_0x3ba5,0xbe003));function _0x229f(_0x2d4c84,_0x5db2d0){_0x2d4c84=_0x2d4c84-0x153;const _0x3ba556=_0x3ba5();let _0x229f2=_0x3ba556[_0x2d4c84];return _0x229f2;}import{writeFile}from'fs/promises';function _0x3ba5(){const _0x4d558b=['163020srXZHP','\x0a❌\x20Config\x20not\x20found\x20at\x20','9378qQaCDZ','4LUfzcK','1366860WAOdJh','exit','10820GIWhJG','1255926jteUni','\x22\x20not\x20found.','error','32ORCMfN','1501970UeAUnl','log','6339350bzuvoo','.ranger','1683456wNbavs','cwd'];_0x3ba5=function(){return _0x4d558b;};return _0x3ba5();}import{join}from'path';import{existsSync}from'fs';export async function useEnv(_0x29437a){const _0x5c8b50=_0x229f,_0x484a50={'jtlFD':function(_0x315d22,_0x2372c1,_0x365f41){return _0x315d22(_0x2372c1,_0x365f41);},'aVLHz':function(_0x261c3b,_0x459965,_0x51a897,_0x52a715){return _0x261c3b(_0x459965,_0x51a897,_0x52a715);},'yievt':function(_0x13bf20,_0x4aa6e3,_0x32c8c7){return _0x13bf20(_0x4aa6e3,_0x32c8c7);}},_0x5afe4b=join(process['cwd'](),_0x5c8b50(0x153),_0x29437a),_0x157634=_0x484a50['jtlFD'](join,_0x5afe4b,'config.json');!existsSync(_0x5afe4b)&&(console[_0x5c8b50(0x15f)]('\x0a❌\x20Environment\x20\x22'+_0x29437a+_0x5c8b50(0x15e)),console[_0x5c8b50(0x15f)]('\x20\x20\x20Run\x20first:\x20ranger\x20add\x20env\x20'+_0x29437a),process[_0x5c8b50(0x15b)](0x1));!existsSync(_0x157634)&&(console[_0x5c8b50(0x15f)](_0x5c8b50(0x157)+_0x157634),console[_0x5c8b50(0x15f)]('\x20\x20\x20Run\x20first:\x20ranger\x20add\x20env\x20'+_0x29437a),process[_0x5c8b50(0x15b)](0x1));const _0x866a63=_0x484a50['aVLHz'](join,process[_0x5c8b50(0x155)](),_0x5c8b50(0x153),'active-env.txt');await _0x484a50['yievt'](writeFile,_0x866a63,_0x29437a),console[_0x5c8b50(0x162)]('\x0a✓\x20Now\x20using\x20environment\x20\x22'+_0x29437a+'\x22');}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEnv.js","sourceRoot":"","sources":["../../src/commands/useEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAe;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE/C,mBAAmB;IACnB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,cAAc,CAAC,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,iDAAiD;IACjD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACvE,MAAM,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(_0x37cd12,_0x2b5b5d){const _0x3f3a46=_0x1fd7,_0x2aceae=_0x37cd12();while(!![]){try{const _0x4aaf2a=parseInt(_0x3f3a46(0x184))/0x1*(-parseInt(_0x3f3a46(0x1a4))/0x2)+-parseInt(_0x3f3a46(0x15e))/0x3*(-parseInt(_0x3f3a46(0x18f))/0x4)+-parseInt(_0x3f3a46(0x17a))/0x5*(parseInt(_0x3f3a46(0x172))/0x6)+-parseInt(_0x3f3a46(0x15d))/0x7+-parseInt(_0x3f3a46(0x163))/0x8*(parseInt(_0x3f3a46(0x161))/0x9)+parseInt(_0x3f3a46(0x19e))/0xa+-parseInt(_0x3f3a46(0x160))/0xb*(-parseInt(_0x3f3a46(0x179))/0xc);if(_0x4aaf2a===_0x2b5b5d)break;else _0x2aceae['push'](_0x2aceae['shift']());}catch(_0x1bd72e){_0x2aceae['push'](_0x2aceae['shift']());}}}(_0x561f,0xd690c));const _0x50a843=(function(){const _0x407ae1=_0x1fd7,_0xdea6fc={'mDskR':_0x407ae1(0x18c),'TWpRT':function(_0x462648,_0x1bf00b){return _0x462648===_0x1bf00b;},'AQVBP':_0x407ae1(0x199)};let _0x272c2d=!![];return function(_0x5b1d83,_0x7da07e){const _0x313a25=_0x272c2d?function(){const _0x4ca99a=_0x1fd7,_0xbb86a4={'BzIDP':_0xdea6fc[_0x4ca99a(0x177)]};if(_0xdea6fc['TWpRT']('ePeLJ',_0xdea6fc[_0x4ca99a(0x16f)]))throw new _0x4c4576(_0xbb86a4[_0x4ca99a(0x198)]);else{if(_0x7da07e){const _0x129cb7=_0x7da07e[_0x4ca99a(0x18a)](_0x5b1d83,arguments);return _0x7da07e=null,_0x129cb7;}}}:function(){};return _0x272c2d=![],_0x313a25;};}()),_0x3a9200=_0x50a843(this,function(){const _0x117c42=_0x1fd7,_0x1783ed={'bXQnJ':'(((.+)+)+)+$'};return _0x3a9200['toString']()[_0x117c42(0x197)](_0x1783ed[_0x117c42(0x1a1)])['toString']()[_0x117c42(0x16e)](_0x3a9200)[_0x117c42(0x197)](_0x117c42(0x190));});_0x3a9200();import{getToken}from'./keychain.js';function getApiBaseUrl(){const _0xfbdc62=_0x1fd7,_0x3729b6={'StFIq':_0xfbdc62(0x19d)};return process[_0xfbdc62(0x164)][_0xfbdc62(0x173)]||_0x3729b6[_0xfbdc62(0x1a2)];}function _0x1fd7(_0x2be23d,_0x356f6f){_0x2be23d=_0x2be23d-0x15a;const _0x1b0df9=_0x561f();let _0x3a9200=_0x1b0df9[_0x2be23d];if(_0x1fd7['UgrMGK']===undefined){var _0x50a843=function(_0x442277){const _0x2f9b4c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x45afa7='',_0x3bb437='',_0x1c5afb=_0x45afa7+_0x50a843;for(let _0x1a9b87=0x0,_0x13a793,_0x53ac9c,_0x50435e=0x0;_0x53ac9c=_0x442277['charAt'](_0x50435e++);~_0x53ac9c&&(_0x13a793=_0x1a9b87%0x4?_0x13a793*0x40+_0x53ac9c:_0x53ac9c,_0x1a9b87++%0x4)?_0x45afa7+=_0x1c5afb['charCodeAt'](_0x50435e+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x13a793>>(-0x2*_0x1a9b87&0x6)):_0x1a9b87:0x0){_0x53ac9c=_0x2f9b4c['indexOf'](_0x53ac9c);}for(let _0x1ce967=0x0,_0x5425d1=_0x45afa7['length'];_0x1ce967<_0x5425d1;_0x1ce967++){_0x3bb437+='%'+('00'+_0x45afa7['charCodeAt'](_0x1ce967)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3bb437);};_0x1fd7['BvmHBX']=_0x50a843,_0x1fd7['pMhVFy']={},_0x1fd7['UgrMGK']=!![];}const _0x561ffd=_0x1b0df9[0x0],_0x1fd7d6=_0x2be23d+_0x561ffd,_0x5b9936=_0x1fd7['pMhVFy'][_0x1fd7d6];if(!_0x5b9936){const _0x31c655=function(_0x473a35){this['CGoGbd']=_0x473a35,this['zValHV']=[0x1,0x0,0x0],this['tWFqww']=function(){return'newState';},this['kSuSxe']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['NRKfZT']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x31c655['prototype']['YCaXfI']=function(){const _0x5c8eec=new RegExp(this['kSuSxe']+this['NRKfZT']),_0xfb5752=_0x5c8eec['test'](this['tWFqww']['toString']())?--this['zValHV'][0x1]:--this['zValHV'][0x0];return this['ikNwGQ'](_0xfb5752);},_0x31c655['prototype']['ikNwGQ']=function(_0xc04cdf){if(!Boolean(~_0xc04cdf))return _0xc04cdf;return this['qFzNqz'](this['CGoGbd']);},_0x31c655['prototype']['qFzNqz']=function(_0x445f3a){for(let _0x4cf895=0x0,_0x4a23c0=this['zValHV']['length'];_0x4cf895<_0x4a23c0;_0x4cf895++){this['zValHV']['push'](Math['round'](Math['random']())),_0x4a23c0=this['zValHV']['length'];}return _0x445f3a(this['zValHV'][0x0]);},new _0x31c655(_0x1fd7)['YCaXfI'](),_0x3a9200=_0x1fd7['BvmHBX'](_0x3a9200),_0x1fd7['pMhVFy'][_0x1fd7d6]=_0x3a9200;}else _0x3a9200=_0x5b9936;return _0x3a9200;}function _0x561f(){const _0x1d587b=['y29UC3rYDwn0B3i','qvfwqLa','ufvu','vwTItNq','mtuXmZyYnLzgu1HyzG','uKfor0vsx0fqsv9vuKW','D3rVAuK','whLczfq','B1rZu3a','BurZA1i','vLn5teW','mJrWt1jtALO','mtbJzwzoBxm','DvnxALO','uNDJsuG','yxbWBgLJyxrPB24VANnVBG','q2ffrwS','DvPsu3C','rMfPBgvKihrVigDLDcbICM93C2vYihnLC3nPB246ia','zurRBgO','v1zhz1a','vuPdrxa','ntq2mduWwKHrr2re','Ahr0Chm6lY90CMfJzs5WBgf5D3jPz2H0lMrLDI8/DhjHy2u9','zMPVBvu','BgvUz3rO','A09HEMK','Dg9tDhjPBMC','yxbWBhK','z3jfyLK','tM8GqvbjihrVA2vUignVBMzPz3vYzwqUifj1BJOGCMfUz2vYihn0yxj0idX0B2TLBJ4','zLfrDvm','DezlqLu','ndr6s3bsrNK','kcGOlISPkYKRksSK','EejgvuO','Aw5kALG','rhfqq0y','ENrXveq','ANnVBG','q2z0AK8','C2vHCMnO','qNPjrfa','BeDXtvG','DxjS','rMTAqvm','EfPwufC','Ahr0Chm6lY9HCgKUCMfUz2vYlM5LDa','nZeXmJmXmg1oqM9Tua','ue9tva','uefuq0G','yLHrBKO','u3rgsxe','qNjiy3O','mNDZs21vzG','u2HlBLe','DgfZAW','rMfPBgvKihrVihvWBg9Hzcb0CMfJztOG','yxbWBgLJyxrPB24VANnVBMW','r0vu','DNbNy3C','mte1mdy1mdjYy0fnseu','ntyXmdn3sKnrue4','CNn4wee','mJi5mZy0nJnQveH0uee','mtHjzMjouvm','C2PTweO','nJa1ntG4meLlDg9qvW','zw52','qLrIDNm','ywHxs1O','rxfxz00','l2fWAs92ms9Ty3aVyNjVD3nLCI1ZzxnZAw9UCW','t3zeqNG','A0HnwuG','rMfPBgvKihrVignYzwf0zsbICM93C2vYihnLC3nPB246ia','Dgv4Da','CLjlwMy'];_0x561f=function(){return _0x1d587b;};return _0x561f();}export async function createBrowserSession(_0x2218d3){const _0x26ced5=_0x1fd7,_0x1d8290={'rsxXA':function(_0x13ebb8){return _0x13ebb8();},'xBFUJ':function(_0x3ad62d,_0x546bf7){return _0x3ad62d===_0x546bf7;},'amduA':_0x26ced5(0x175),'BTbvs':_0x26ced5(0x16a),'grEbY':'No\x20API\x20token\x20configured.\x20Run:\x20ranger\x20start\x20<token>','sjmXJ':_0x26ced5(0x17d)},_0xa494ee=await _0x1d8290[_0x26ced5(0x15f)](getToken);if(!_0xa494ee){if(_0x1d8290[_0x26ced5(0x191)](_0x1d8290['amduA'],_0x1d8290[_0x26ced5(0x165)])){const _0x3a0369=_0x4aa1e1(_0x2e4516);return'https://trace.playwright.dev/?trace='+_0x3a0369;}else throw new Error(_0x1d8290[_0x26ced5(0x18b)]);}const _0xcc1d11=_0x1d8290[_0x26ced5(0x15f)](getApiBaseUrl),_0x4b4656=await fetch(_0xcc1d11+_0x26ced5(0x168),{'method':_0x26ced5(0x19f),'headers':{'Authorization':'Bearer\x20'+_0xa494ee,'Content-Type':_0x1d8290[_0x26ced5(0x162)]},'body':JSON['stringify']({'environmentName':_0x2218d3?.['environmentName'],'settings':_0x2218d3?.['settings'],'task':_0x2218d3?.[_0x26ced5(0x1a6)],'url':_0x2218d3?.[_0x26ced5(0x19a)]})});if(!_0x4b4656['ok']){const _0x5c19a3=await _0x4b4656[_0x26ced5(0x16c)]();throw new Error(_0x26ced5(0x16b)+_0x5c19a3);}return _0x4b4656[_0x26ced5(0x195)]();}export async function updateBrowserSession(_0x2931aa,_0x24c422){const _0x28888c=_0x1fd7,_0x58b998={'rrOyd':function(_0xfa4216,_0x13100b){return _0xfa4216!==_0x13100b;},'rRKZf':_0x28888c(0x181),'VSyLL':_0x28888c(0x17f),'fjomU':_0x28888c(0x18c),'CaEEk':function(_0x4a8e8f){return _0x4a8e8f();},'vpgcw':_0x28888c(0x1a0),'xgvQG':_0x28888c(0x17d),'dqXkh':function(_0xe55b57,_0x22e352){return _0xe55b57===_0x22e352;},'inJjX':_0x28888c(0x196)},_0x33682f=await getToken();if(!_0x33682f){if(_0x58b998['rrOyd'](_0x58b998[_0x28888c(0x16d)],_0x58b998[_0x28888c(0x178)]))throw new Error(_0x58b998[_0x28888c(0x186)]);else{const _0x1d6ce8=_0x31c655?function(){const _0x2d3f63=_0x28888c;if(_0x4cf895){const _0xcefd36=_0x498a6b[_0x2d3f63(0x18a)](_0x2e38d9,arguments);return _0x575d57=null,_0xcefd36;}}:function(){};return _0x445f3a=![],_0x1d6ce8;}}const _0x2e3390=_0x58b998[_0x28888c(0x17e)](getApiBaseUrl),_0x224c63=await fetch(_0x2e3390+'/api/v1/mcp/browser-sessions/'+_0x2931aa,{'method':_0x58b998[_0x28888c(0x15c)],'headers':{'Authorization':'Bearer\x20'+_0x33682f,'Content-Type':_0x58b998['xgvQG']},'body':JSON['stringify'](_0x24c422)});if(!_0x224c63['ok']){if(_0x58b998['dqXkh'](_0x58b998[_0x28888c(0x192)],_0x28888c(0x169))){const _0x112e91=_0x31a123['apply'](_0x4bcc48,arguments);return _0x3392fe=null,_0x112e91;}else{const _0x36b28b=await _0x224c63[_0x28888c(0x16c)]();throw new Error('Failed\x20to\x20update\x20browser\x20session:\x20'+_0x36b28b);}}return _0x224c63[_0x28888c(0x195)]();}export async function getBrowserSession(_0x22a730){const _0xe42dfc=_0x1fd7,_0x4a02a7={'UkbNt':_0xe42dfc(0x190),'DqPCF':function(_0x1701ac){return _0x1701ac();},'EqWgM':_0xe42dfc(0x18c),'WVGgP':function(_0x36f395){return _0x36f395();},'ahWKZ':function(_0x59b58c,_0x1f043a,_0x58fafb){return _0x59b58c(_0x1f043a,_0x58fafb);},'xZVPW':_0xe42dfc(0x15b),'FkZAS':_0xe42dfc(0x188)},_0x46be85=await _0x4a02a7[_0xe42dfc(0x193)](getToken);if(!_0x46be85)throw new Error(_0x4a02a7[_0xe42dfc(0x167)]);const _0x1b0304=_0x4a02a7[_0xe42dfc(0x182)](getApiBaseUrl),_0x48c7e6=await _0x4a02a7[_0xe42dfc(0x166)](fetch,_0x1b0304+'/api/v1/mcp/browser-sessions/'+_0x22a730,{'method':_0x4a02a7[_0xe42dfc(0x19c)],'headers':{'Authorization':'Bearer\x20'+_0x46be85}});if(!_0x48c7e6['ok']){if(_0xe42dfc(0x1a3)===_0x4a02a7[_0xe42dfc(0x19b)])return _0x344a6d['toString']()[_0xe42dfc(0x197)](egafRQ[_0xe42dfc(0x171)])[_0xe42dfc(0x189)]()['constructor'](_0x1775a6)[_0xe42dfc(0x197)](egafRQ[_0xe42dfc(0x171)]);else{const _0x317ee5=await _0x48c7e6[_0xe42dfc(0x16c)]();throw new Error(_0xe42dfc(0x180)+_0x317ee5);}}return _0x48c7e6[_0xe42dfc(0x195)]();}export async function uploadTrace(_0x211bec,_0x9ed1ae){const _0x5d8ff7=_0x1fd7,_0x503cc0={'IUydv':function(_0x4e258b,_0x1033f5,_0x331795){return _0x4e258b(_0x1033f5,_0x331795);},'oTsSp':_0x5d8ff7(0x170),'UJCEp':'application/zip'},_0x283799=await _0x503cc0['IUydv'](fetch,_0x211bec,{'method':_0x503cc0[_0x5d8ff7(0x176)],'headers':{'Content-Type':_0x503cc0[_0x5d8ff7(0x183)],'Content-Length':_0x9ed1ae[_0x5d8ff7(0x187)]['toString']()},'body':_0x9ed1ae});if(!_0x283799['ok']){const _0x5437f5=await _0x283799[_0x5d8ff7(0x16c)]();throw new Error(_0x5d8ff7(0x1a7)+_0x5437f5);}}export async function uploadConversation(_0x4d5040,_0x46f92e){const _0x26902b=_0x1fd7,_0x584d97={'ShKnQ':_0x26902b(0x18c),'wtoiI':'PUT','RwcIH':function(_0x35dc9d,_0x2c7576){return _0x35dc9d===_0x2c7576;},'fQQuS':_0x26902b(0x18e),'uSWjZ':'KCsJI'},_0x3a993d=await fetch(_0x4d5040,{'method':_0x584d97[_0x26902b(0x174)],'headers':{'Content-Type':_0x26902b(0x15a),'Content-Length':_0x46f92e[_0x26902b(0x187)][_0x26902b(0x189)]()},'body':_0x46f92e});if(!_0x3a993d['ok']){if(_0x584d97[_0x26902b(0x17c)](_0x584d97[_0x26902b(0x18d)],_0x584d97[_0x26902b(0x17b)]))throw new _0x6a313b(_0x584d97[_0x26902b(0x1a5)]);else{const _0x1df934=await _0x3a993d[_0x26902b(0x16c)]();throw new Error('Failed\x20to\x20upload\x20conversation:\x20'+_0x1df934);}}}export function buildTraceViewerUrl(_0x39ed90){const _0x2044d1=_0x1fd7,_0x49fb03={'ztqTD':function(_0xc06c19,_0x230592){return _0xc06c19(_0x230592);}},_0x49af94=_0x49fb03[_0x2044d1(0x194)](encodeURIComponent,_0x39ed90);return _0x2044d1(0x185)+_0x49af94;}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserSessionsApi.js","sourceRoot":"","sources":["../../../src/commands/utils/browserSessionsApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync, } from 'crypto';
|
|
2
|
+
const ALGORITHM = 'aes-256-gcm';
|
|
3
|
+
const SALT = 'ranger-auth-encryption'; // Fixed salt is fine since token is unique
|
|
4
|
+
const KEY_LENGTH = 32;
|
|
5
|
+
const IV_LENGTH = 16;
|
|
6
|
+
const TAG_LENGTH = 16;
|
|
7
|
+
/**
|
|
8
|
+
* Derive an encryption key from the API token using PBKDF2.
|
|
9
|
+
*/
|
|
10
|
+
export function deriveKey(token) {
|
|
11
|
+
return pbkdf2Sync(token, SALT, 100000, KEY_LENGTH, 'sha256');
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Encrypt data using AES-256-GCM with a key derived from the API token.
|
|
15
|
+
* Returns a Buffer containing: IV (16 bytes) + Auth Tag (16 bytes) + Encrypted data
|
|
16
|
+
*/
|
|
17
|
+
export function encrypt(data, token) {
|
|
18
|
+
const key = deriveKey(token);
|
|
19
|
+
const iv = randomBytes(IV_LENGTH);
|
|
20
|
+
const cipher = createCipheriv(ALGORITHM, key, iv);
|
|
21
|
+
const encrypted = Buffer.concat([
|
|
22
|
+
cipher.update(data, 'utf8'),
|
|
23
|
+
cipher.final(),
|
|
24
|
+
]);
|
|
25
|
+
const tag = cipher.getAuthTag();
|
|
26
|
+
// Format: IV (16) + Tag (16) + Encrypted data
|
|
27
|
+
return Buffer.concat([iv, tag, encrypted]);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Decrypt data that was encrypted with the encrypt() function.
|
|
31
|
+
* Expects a Buffer containing: IV (16 bytes) + Auth Tag (16 bytes) + Encrypted data
|
|
32
|
+
*/
|
|
33
|
+
export function decrypt(encryptedData, token) {
|
|
34
|
+
const key = deriveKey(token);
|
|
35
|
+
const iv = encryptedData.subarray(0, IV_LENGTH);
|
|
36
|
+
const tag = encryptedData.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH);
|
|
37
|
+
const data = encryptedData.subarray(IV_LENGTH + TAG_LENGTH);
|
|
38
|
+
const decipher = createDecipheriv(ALGORITHM, key, iv);
|
|
39
|
+
decipher.setAuthTag(tag);
|
|
40
|
+
return decipher.update(data) + decipher.final('utf8');
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/commands/utils/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,UAAU,GACb,MAAM,QAAQ,CAAC;AAEhB,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,IAAI,GAAG,wBAAwB,CAAC,CAAC,2CAA2C;AAClF,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACnC,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,KAAa;IAC/C,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;QAC3B,MAAM,CAAC,KAAK,EAAE;KACjB,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEhC,8CAA8C;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,aAAqB,EAAE,KAAa;IACxD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC;IAE5D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEzB,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x281e5f=_0x2273;(function(_0x4fccb7,_0x3a5df9){const _0x1cbd32=_0x2273,_0x4d3f9e=_0x4fccb7();while(!![]){try{const _0x376a37=parseInt(_0x1cbd32(0x1f2))/0x1*(parseInt(_0x1cbd32(0x202))/0x2)+-parseInt(_0x1cbd32(0x1f6))/0x3*(parseInt(_0x1cbd32(0x1f8))/0x4)+parseInt(_0x1cbd32(0x1fb))/0x5*(-parseInt(_0x1cbd32(0x1fd))/0x6)+-parseInt(_0x1cbd32(0x203))/0x7+-parseInt(_0x1cbd32(0x1f1))/0x8+-parseInt(_0x1cbd32(0x1fc))/0x9+-parseInt(_0x1cbd32(0x200))/0xa*(-parseInt(_0x1cbd32(0x1f5))/0xb);if(_0x376a37===_0x3a5df9)break;else _0x4d3f9e['push'](_0x4d3f9e['shift']());}catch(_0x23c936){_0x4d3f9e['push'](_0x4d3f9e['shift']());}}}(_0x1390,0xa17d6));const _0x46cc41=(function(){let _0x431ec4=!![];return function(_0x5dac43,_0x44b985){const _0x253861=_0x431ec4?function(){const _0x4a9ccd=_0x2273;if(_0x44b985){const _0x3ee278=_0x44b985[_0x4a9ccd(0x1f3)](_0x5dac43,arguments);return _0x44b985=null,_0x3ee278;}}:function(){};return _0x431ec4=![],_0x253861;};}()),_0x2e957e=_0x46cc41(this,function(){const _0xce202b=_0x2273,_0x42505={'dCpeS':'(((.+)+)+)+$'};return _0x2e957e[_0xce202b(0x201)]()[_0xce202b(0x1ee)](_0x42505[_0xce202b(0x1fa)])['toString']()[_0xce202b(0x204)](_0x2e957e)['search'](_0x42505[_0xce202b(0x1fa)]);});_0x2e957e();import _0x23396e from'keytar';const SERVICE_NAME='ranger-cli',ACCOUNT_TOKEN=_0x281e5f(0x1f0),ACCOUNT_SERVER_URL=_0x281e5f(0x1fe);export async function storeToken(_0x48f039){await _0x23396e['setPassword'](SERVICE_NAME,ACCOUNT_TOKEN,_0x48f039);}function _0x2273(_0x200861,_0x4ed084){_0x200861=_0x200861-0x1ee;const _0x2a5a39=_0x1390();let _0x2e957e=_0x2a5a39[_0x200861];if(_0x2273['tqXBDa']===undefined){var _0x46cc41=function(_0x20e43c){const _0x835600='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4c7f64='',_0x29ba86='',_0x117f69=_0x4c7f64+_0x46cc41;for(let _0x5a00bc=0x0,_0x57c7e5,_0x5d5b81,_0x18a0a2=0x0;_0x5d5b81=_0x20e43c['charAt'](_0x18a0a2++);~_0x5d5b81&&(_0x57c7e5=_0x5a00bc%0x4?_0x57c7e5*0x40+_0x5d5b81:_0x5d5b81,_0x5a00bc++%0x4)?_0x4c7f64+=_0x117f69['charCodeAt'](_0x18a0a2+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x57c7e5>>(-0x2*_0x5a00bc&0x6)):_0x5a00bc:0x0){_0x5d5b81=_0x835600['indexOf'](_0x5d5b81);}for(let _0x2e1ff0=0x0,_0x3053c1=_0x4c7f64['length'];_0x2e1ff0<_0x3053c1;_0x2e1ff0++){_0x29ba86+='%'+('00'+_0x4c7f64['charCodeAt'](_0x2e1ff0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x29ba86);};_0x2273['AnZjJp']=_0x46cc41,_0x2273['QNxWLG']={},_0x2273['tqXBDa']=!![];}const _0x1390be=_0x2a5a39[0x0],_0x227395=_0x200861+_0x1390be,_0x45c486=_0x2273['QNxWLG'][_0x227395];if(!_0x45c486){const _0x24304d=function(_0x5d5fb6){this['ttHNnQ']=_0x5d5fb6,this['hbHhjI']=[0x1,0x0,0x0],this['iFrxNV']=function(){return'newState';},this['cKRNIV']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['GrgXgR']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x24304d['prototype']['qpjAzh']=function(){const _0x208bad=new RegExp(this['cKRNIV']+this['GrgXgR']),_0x2f48fc=_0x208bad['test'](this['iFrxNV']['toString']())?--this['hbHhjI'][0x1]:--this['hbHhjI'][0x0];return this['YextaH'](_0x2f48fc);},_0x24304d['prototype']['YextaH']=function(_0xb6c109){if(!Boolean(~_0xb6c109))return _0xb6c109;return this['GwQckM'](this['ttHNnQ']);},_0x24304d['prototype']['GwQckM']=function(_0x245050){for(let _0x11b37d=0x0,_0x137bb2=this['hbHhjI']['length'];_0x11b37d<_0x137bb2;_0x11b37d++){this['hbHhjI']['push'](Math['round'](Math['random']())),_0x137bb2=this['hbHhjI']['length'];}return _0x245050(this['hbHhjI'][0x0]);},new _0x24304d(_0x2273)['qpjAzh'](),_0x2e957e=_0x2273['AnZjJp'](_0x2e957e),_0x2273['QNxWLG'][_0x227395]=_0x2e957e;}else _0x2e957e=_0x45c486;return _0x2e957e;}export async function getToken(){const _0x117a68=_0x281e5f;return await _0x23396e[_0x117a68(0x1ff)](SERVICE_NAME,ACCOUNT_TOKEN);}function _0x1390(){const _0x3477f0=['C2vHCMnO','C2v0ugfZC3DVCMq','yxbPlxrVA2vU','ndGYmZq4ohfLCuDWzW','nZm2ntHjA0XTBw4','yxbWBhK','vNbtC2W','mteWmezoswrfAG','nLrey1jKuq','EK5mD2C','mtu2oduWoe5zwezSCa','zgvSzxrLugfZC3DVCMq','zenWzvm','nduYmdm1DK5YEND2','mtaWnda4mdvNuK1ZBwq','nZH0t2LYDMe','C2vYDMvYlxvYBa','z2v0ugfZC3DVCMq','mZu2mdGWANbtz1bl','Dg9tDhjPBMC','mZj6wNDHEhu','mJC5ode4me52uxrbsa','y29UC3rYDwn0B3i'];_0x1390=function(){return _0x3477f0;};return _0x1390();}export async function deleteToken(){const _0x50ab37=_0x281e5f;return await _0x23396e[_0x50ab37(0x1f9)](SERVICE_NAME,ACCOUNT_TOKEN);}export async function storeServerUrl(_0x40838a){const _0x4e9dec=_0x281e5f;await _0x23396e[_0x4e9dec(0x1ef)](SERVICE_NAME,ACCOUNT_SERVER_URL,_0x40838a);}export async function getServerUrl(){const _0xa84054=_0x281e5f;return await _0x23396e[_0xa84054(0x1ff)](SERVICE_NAME,ACCOUNT_SERVER_URL);}export async function deleteServerUrl(){const _0x4a2d48=_0x281e5f;return await _0x23396e[_0x4a2d48(0x1f9)](SERVICE_NAME,ACCOUNT_SERVER_URL);}export async function deleteAllCredentials(){const _0x3c582e=_0x281e5f,_0xcff31d={'zNLwg':function(_0x1f30a0){return _0x1f30a0();},'VpSsl':function(_0x53e901){return _0x53e901();}};await _0xcff31d[_0x3c582e(0x1f7)](deleteToken),await _0xcff31d[_0x3c582e(0x1f4)](deleteServerUrl);}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../../src/commands/utils/keychain.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,aAAa,GAAG,WAAW,CAAC;AAClC,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAExC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa;IAC1C,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC1B,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC5C,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAC9B,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACtC,MAAM,WAAW,EAAE,CAAC;IACpB,MAAM,eAAe,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(_0x218669,_0x2b33ce){const _0x93165=_0x12b8,_0x5e6b5e=_0x218669();while(!![]){try{const _0x1a40f7=-parseInt(_0x93165(0x135))/0x1*(-parseInt(_0x93165(0x125))/0x2)+-parseInt(_0x93165(0x121))/0x3*(parseInt(_0x93165(0x11f))/0x4)+parseInt(_0x93165(0x137))/0x5*(-parseInt(_0x93165(0x11c))/0x6)+parseInt(_0x93165(0x12c))/0x7+parseInt(_0x93165(0x123))/0x8+parseInt(_0x93165(0x134))/0x9*(parseInt(_0x93165(0x12e))/0xa)+-parseInt(_0x93165(0x12f))/0xb*(-parseInt(_0x93165(0x126))/0xc);if(_0x1a40f7===_0x2b33ce)break;else _0x5e6b5e['push'](_0x5e6b5e['shift']());}catch(_0x403044){_0x5e6b5e['push'](_0x5e6b5e['shift']());}}}(_0x3cde,0x83c14));const _0xe028aa=(function(){const _0x13523c=_0x12b8,_0xb8c3f0={'LTIfQ':_0x13523c(0x133),'yNgxv':function(_0xef285,_0x30de35){return _0xef285===_0x30de35;},'OquaC':'NnKcq'};let _0x3186d6=!![];return function(_0x195d8e,_0x6e8406){const _0x14c9cd=_0x13523c,_0x3f9aca={'NAutg':_0xb8c3f0[_0x14c9cd(0x138)],'MqxJo':function(_0x91e49a,_0xb9c3b2){const _0x18336f=_0x14c9cd;return _0xb8c3f0[_0x18336f(0x136)](_0x91e49a,_0xb9c3b2);},'CFGKj':_0xb8c3f0['OquaC'],'mqLaV':_0x14c9cd(0x119)},_0x7fbf2=_0x3186d6?function(){const _0x1685a0=_0x14c9cd;if(_0x3f9aca[_0x1685a0(0x128)](_0x3f9aca['CFGKj'],_0x1685a0(0x114))){if(_0x6e8406){if(_0x3f9aca['MqxJo'](_0x3f9aca['mqLaV'],_0x3f9aca[_0x1685a0(0x116)])){const _0x5c468e=_0x6e8406[_0x1685a0(0x11a)](_0x195d8e,arguments);return _0x6e8406=null,_0x5c468e;}else{const _0x3fa24a=_0x5daf2b?function(){const _0x23e751=_0x1685a0;if(_0x4eb51d){const _0xf9c594=_0x1368d0[_0x23e751(0x11a)](_0xf434a5,arguments);return _0x2c286f=null,_0xf9c594;}}:function(){};return _0x239352=![],_0x3fa24a;}}}else return _0x46777d[_0x1685a0(0x11d)]['RANGER_API_URL']||_0x3f9aca['NAutg'];}:function(){};return _0x3186d6=![],_0x7fbf2;};}()),_0x2faf70=_0xe028aa(this,function(){const _0x1024bb=_0x12b8,_0x8745d9={'zXXwt':_0x1024bb(0x117)};return _0x2faf70[_0x1024bb(0x11b)]()['search'](_0x8745d9['zXXwt'])[_0x1024bb(0x11b)]()[_0x1024bb(0x124)](_0x2faf70)['search'](_0x8745d9[_0x1024bb(0x129)]);});_0x2faf70();import{getToken}from'./keychain.js';function getApiBaseUrl(){const _0x4537d6=_0x12b8,_0x1b0f63={'rAScd':_0x4537d6(0x133)};return process[_0x4537d6(0x11d)]['RANGER_API_URL']||_0x1b0f63[_0x4537d6(0x122)];}function _0x12b8(_0x157dbd,_0x1b4732){_0x157dbd=_0x157dbd-0x114;const _0x1d8cea=_0x3cde();let _0x2faf70=_0x1d8cea[_0x157dbd];if(_0x12b8['nCNXyU']===undefined){var _0xe028aa=function(_0x38d250){const _0x59a9b1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3ad5c9='',_0x5f3594='',_0x520c67=_0x3ad5c9+_0xe028aa;for(let _0x3de02c=0x0,_0x5159c1,_0x19f6a8,_0x4cbf92=0x0;_0x19f6a8=_0x38d250['charAt'](_0x4cbf92++);~_0x19f6a8&&(_0x5159c1=_0x3de02c%0x4?_0x5159c1*0x40+_0x19f6a8:_0x19f6a8,_0x3de02c++%0x4)?_0x3ad5c9+=_0x520c67['charCodeAt'](_0x4cbf92+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x5159c1>>(-0x2*_0x3de02c&0x6)):_0x3de02c:0x0){_0x19f6a8=_0x59a9b1['indexOf'](_0x19f6a8);}for(let _0x245ee2=0x0,_0xe81ccc=_0x3ad5c9['length'];_0x245ee2<_0xe81ccc;_0x245ee2++){_0x5f3594+='%'+('00'+_0x3ad5c9['charCodeAt'](_0x245ee2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5f3594);};_0x12b8['BNPzVp']=_0xe028aa,_0x12b8['yhBzoD']={},_0x12b8['nCNXyU']=!![];}const _0x3cdebd=_0x1d8cea[0x0],_0x12b844=_0x157dbd+_0x3cdebd,_0x58c500=_0x12b8['yhBzoD'][_0x12b844];if(!_0x58c500){const _0x5daf2b=function(_0x512a2b){this['bVOYqT']=_0x512a2b,this['czAfeG']=[0x1,0x0,0x0],this['FnDjLv']=function(){return'newState';},this['AMzvSJ']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['ODJCEn']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x5daf2b['prototype']['vadddi']=function(){const _0x1186ab=new RegExp(this['AMzvSJ']+this['ODJCEn']),_0x59d4ce=_0x1186ab['test'](this['FnDjLv']['toString']())?--this['czAfeG'][0x1]:--this['czAfeG'][0x0];return this['MjGJXA'](_0x59d4ce);},_0x5daf2b['prototype']['MjGJXA']=function(_0x58fd6c){if(!Boolean(~_0x58fd6c))return _0x58fd6c;return this['jcVmRV'](this['bVOYqT']);},_0x5daf2b['prototype']['jcVmRV']=function(_0x239352){for(let _0x4eb51d=0x0,_0x1e2f08=this['czAfeG']['length'];_0x4eb51d<_0x1e2f08;_0x4eb51d++){this['czAfeG']['push'](Math['round'](Math['random']())),_0x1e2f08=this['czAfeG']['length'];}return _0x239352(this['czAfeG'][0x0]);},new _0x5daf2b(_0x12b8)['vadddi'](),_0x2faf70=_0x12b8['BNPzVp'](_0x2faf70),_0x12b8['yhBzoD'][_0x12b844]=_0x2faf70;}else _0x2faf70=_0x58c500;return _0x2faf70;}export async function logLocalAgentInstallation(_0xb250b1,_0x15d22e,_0x40f5f0){const _0x2a0089=_0x12b8,_0x451f03={'GvZJJ':'(((.+)+)+)+$','EEafH':_0x2a0089(0x118),'WFYni':_0x2a0089(0x130),'kTrrb':function(_0x5a7711){return _0x5a7711();},'ltDQn':function(_0x36eb56,_0x2e83f3,_0x5c56c0){return _0x36eb56(_0x2e83f3,_0x5c56c0);},'irioJ':'POST','tkDeu':'application/json'},_0x562da6=await getToken();if(!_0x562da6){if(_0x451f03['EEafH']!==_0x451f03[_0x2a0089(0x115)])return;else return _0x207424[_0x2a0089(0x11b)]()['search'](RkqJKY[_0x2a0089(0x127)])[_0x2a0089(0x11b)]()['constructor'](_0x65a80c)[_0x2a0089(0x120)](RkqJKY[_0x2a0089(0x127)]);}const _0x28382b=_0x451f03['kTrrb'](getApiBaseUrl),_0xf4691c=await _0x451f03['ltDQn'](fetch,_0x28382b+_0x2a0089(0x11e),{'method':_0x451f03[_0x2a0089(0x131)],'headers':{'Authorization':_0x2a0089(0x139)+_0x562da6,'Content-Type':_0x451f03[_0x2a0089(0x12d)]},'body':JSON[_0x2a0089(0x12a)]({'skillName':_0xb250b1,'cliVersion':_0x40f5f0,'metadata':_0x15d22e})});if(!_0xf4691c['ok']){const _0x33dc26=await _0xf4691c['text']();console[_0x2a0089(0x132)](_0x2a0089(0x12b)+_0x33dc26);}}function _0x3cde(){const _0x5344bd=['tM5OCeq','AxjPB0O','zxjYB3i','Ahr0Chm6lY9HCgKUCMfUz2vYlM5LDa','mJqWntC5AhDTq211','mtD3y0jAyui','Eu5NEhy','mZy0odu2mg5bz3LwrW','tfrjzLe','qMvHCMvYia','tM5ly3e','v0zzBMK','Bxfmyvy','kcGOlISPkYKRksSK','ANDLuwm','DuXXyNe','yxbWBhK','Dg9tDhjPBMC','nNruzMfkua','zw52','l2fWAs92ms9Ty3aVBg9JywWTywDLBNqTAw5ZDgfSBgf0Aw9UCW','mtu5mMndsfv0vG','C2vHCMnO','nZviv3zrB3K','CKfty2q','mZGYntzIzefJD0O','y29UC3rYDwn0B3i','mZiWmZbvvNvbBLC','mJret05Ztvq','r3zAsKO','txf4sM8','ELHyD3q','C3rYAw5NAwz5','rMfPBgvKihrVigXVzYbZA2LSBcbPBNn0ywXSyxrPB246ia','ntiYmJK1mKPIA1DREG','DgTezxu','ntbQt3LksgC','nJCZnZyXug1KqvfO'];_0x3cde=function(){return _0x5344bd;};return _0x3cde();}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localAgentInstallationsApi.js","sourceRoot":"","sources":["../../../src/commands/utils/localAgentInstallationsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,SAAS,aAAa;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,wBAAwB,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC3C,SAAiB,EACjB,QAAkC,EAClC,UAAmB;IAEnB,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,gDAAgD;QAChD,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,GAAG,OAAO,uCAAuC,EACjD;QACI,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,cAAc,EAAE,kBAAkB;SACrC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACjB,SAAS;YACT,UAAU;YACV,QAAQ;SACX,CAAC;KACL,CACJ,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,uDAAuD;QACvD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;AACL,CAAC"}
|
|
@@ -1,47 +1 @@
|
|
|
1
|
-
import { readFile, writeFile }
|
|
2
|
-
import { existsSync } from 'fs';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
export function getMcpConfigPath() {
|
|
5
|
-
return join(process.cwd(), '.mcp.json');
|
|
6
|
-
}
|
|
7
|
-
export async function loadMcpConfig() {
|
|
8
|
-
const mcpConfigPath = getMcpConfigPath();
|
|
9
|
-
if (existsSync(mcpConfigPath)) {
|
|
10
|
-
try {
|
|
11
|
-
const existingConfig = await readFile(mcpConfigPath, 'utf-8');
|
|
12
|
-
return JSON.parse(existingConfig);
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
// If parse fails, start fresh
|
|
16
|
-
return { mcpServers: {} };
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return { mcpServers: {} };
|
|
20
|
-
}
|
|
21
|
-
export async function saveMcpConfig(config) {
|
|
22
|
-
const mcpConfigPath = getMcpConfigPath();
|
|
23
|
-
await writeFile(mcpConfigPath, JSON.stringify(config, null, 2));
|
|
24
|
-
}
|
|
25
|
-
export function hasRangerServer(config) {
|
|
26
|
-
return !!config.mcpServers.ranger;
|
|
27
|
-
}
|
|
28
|
-
export function setRangerServer(config, token, serverUrl) {
|
|
29
|
-
config.mcpServers.ranger = {
|
|
30
|
-
type: 'http',
|
|
31
|
-
url: `${serverUrl}/mcp`,
|
|
32
|
-
headers: {
|
|
33
|
-
Authorization: `Bearer ${token}`,
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
export function setRangerBrowser(config, configPath) {
|
|
38
|
-
config.mcpServers['ranger-browser'] = {
|
|
39
|
-
command: 'npx',
|
|
40
|
-
args: [
|
|
41
|
-
'@ranger-testing/playwright',
|
|
42
|
-
'run-mcp-server',
|
|
43
|
-
'--config',
|
|
44
|
-
configPath,
|
|
45
|
-
],
|
|
46
|
-
};
|
|
47
|
-
}
|
|
1
|
+
(function(_0x1718e6,_0x1ee20d){const _0x12c36c=_0x283e,_0x5d4360=_0x1718e6();while(!![]){try{const _0x1c408d=-parseInt(_0x12c36c(0x1f6))/0x1*(-parseInt(_0x12c36c(0x1fb))/0x2)+parseInt(_0x12c36c(0x1f9))/0x3+parseInt(_0x12c36c(0x205))/0x4+parseInt(_0x12c36c(0x1fd))/0x5*(-parseInt(_0x12c36c(0x1f7))/0x6)+parseInt(_0x12c36c(0x1ff))/0x7+parseInt(_0x12c36c(0x1f8))/0x8+-parseInt(_0x12c36c(0x1fc))/0x9;if(_0x1c408d===_0x1ee20d)break;else _0x5d4360['push'](_0x5d4360['shift']());}catch(_0x29289a){_0x5d4360['push'](_0x5d4360['shift']());}}}(_0x4fb4,0x57585));import{readFile,writeFile}from'fs/promises';import{existsSync}from'fs';import{join}from'path';function _0x283e(_0x54d595,_0x4a2deb){_0x54d595=_0x54d595-0x1f4;const _0x4fb46a=_0x4fb4();let _0x283e93=_0x4fb46a[_0x54d595];return _0x283e93;}function _0x4fb4(){const _0x3a7cdf=['2004126oFHpXJ','1759672kpNNLE','1367817ECUHqT','@ranger-testing/ranger-cli','5458sAvOpN','8241048MiMGBL','5NkXnfH','vaksA','3128902ZFmAnt','PcVbL','pjuJg','parse','utf-8','.mcp.json','453720kqMFVp','data-mcp-server','mcpServers','136UtpPjQ'];_0x4fb4=function(){return _0x3a7cdf;};return _0x4fb4();}export function getMcpConfigPath(){const _0x3e35fc=_0x283e,_0x30455c={'qcZaQ':function(_0x49fa9e,_0x4d70a2,_0x40df75){return _0x49fa9e(_0x4d70a2,_0x40df75);},'BxvHa':_0x3e35fc(0x204)};return _0x30455c['qcZaQ'](join,process['cwd'](),_0x30455c['BxvHa']);}export async function loadMcpConfig(){const _0x53b359=_0x283e,_0x4daf53={'PcVbL':_0x53b359(0x203)},_0x38e5da=getMcpConfigPath();if(existsSync(_0x38e5da))try{const _0x3d4a22=await readFile(_0x38e5da,_0x4daf53[_0x53b359(0x200)]);return JSON[_0x53b359(0x202)](_0x3d4a22);}catch{return{'mcpServers':{}};}return{'mcpServers':{}};}export async function saveMcpConfig(_0xaf82ca){const _0x153271=_0x283e,_0x48b922={'pjuJg':function(_0x45690d,_0x240968,_0x26cfd6){return _0x45690d(_0x240968,_0x26cfd6);}},_0x5b8aa8=getMcpConfigPath();await _0x48b922[_0x153271(0x201)](writeFile,_0x5b8aa8,JSON['stringify'](_0xaf82ca,null,0x2));}export function hasRangerServer(_0x1579f6){const _0x296e96=_0x283e;return!!_0x1579f6[_0x296e96(0x1f5)]['ranger'];}export function setRangerServer(_0x9b1e76){const _0x3e85c5=_0x283e,_0x1167ae={'vaksA':'npx','NbRbu':_0x3e85c5(0x1fa),'YquHt':_0x3e85c5(0x1f4)};_0x9b1e76[_0x3e85c5(0x1f5)]['ranger']={'command':_0x1167ae[_0x3e85c5(0x1fe)],'args':[_0x1167ae['NbRbu'],_0x1167ae['YquHt']]};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpConfig.js","sourceRoot":"","sources":["../../../src/commands/utils/mcpConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAY5B,MAAM,UAAU,gBAAgB;IAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACD,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACL,8BAA8B;YAC9B,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAiB;IACjD,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC7C,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC7C,iEAAiE;IACjE,qCAAqC;IACrC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG;QACvB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,4BAA4B,EAAE,iBAAiB,CAAC;KAC1D,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { readdir } from 'fs/promises';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { existsSync } from 'fs';
|
|
4
|
+
/**
|
|
5
|
+
* Collect screenshots from session directory
|
|
6
|
+
*/
|
|
7
|
+
export async function collectScreenshots(sessionDir) {
|
|
8
|
+
const screenshots = [];
|
|
9
|
+
const paths = [];
|
|
10
|
+
if (!existsSync(sessionDir)) {
|
|
11
|
+
return { screenshots, paths };
|
|
12
|
+
}
|
|
13
|
+
const files = await readdir(sessionDir);
|
|
14
|
+
const imageFiles = files
|
|
15
|
+
.filter((f) => /\.(png|jpg|jpeg|gif|webp)$/i.test(f))
|
|
16
|
+
.sort(); // Sort to maintain order
|
|
17
|
+
for (const filename of imageFiles) {
|
|
18
|
+
const fullPath = join(sessionDir, filename);
|
|
19
|
+
screenshots.push({
|
|
20
|
+
filename,
|
|
21
|
+
path: fullPath,
|
|
22
|
+
relativePath: `./${filename}`, // Relative to report.md in same dir
|
|
23
|
+
});
|
|
24
|
+
paths.push(fullPath);
|
|
25
|
+
}
|
|
26
|
+
return { screenshots, paths };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get emoji for severity level
|
|
30
|
+
*/
|
|
31
|
+
function getSeverityEmoji(severity) {
|
|
32
|
+
switch (severity) {
|
|
33
|
+
case 'BLOCKER':
|
|
34
|
+
return '🔴';
|
|
35
|
+
case 'MAJOR':
|
|
36
|
+
return '🟠';
|
|
37
|
+
default:
|
|
38
|
+
return '⚪';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Format screenshot filename into a readable caption
|
|
43
|
+
* e.g., "03-after-login.png" -> "After Login"
|
|
44
|
+
*/
|
|
45
|
+
function formatScreenshotCaption(filename) {
|
|
46
|
+
const nameWithoutExt = filename.replace(/\.(png|jpg|jpeg|gif|webp)$/i, '');
|
|
47
|
+
const nameWithoutNumber = nameWithoutExt.replace(/^\d+-/, '');
|
|
48
|
+
return nameWithoutNumber
|
|
49
|
+
.split('-')
|
|
50
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
51
|
+
.join(' ');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Generate a markdown verification report and return it as a string
|
|
55
|
+
*/
|
|
56
|
+
export function generateMarkdownReport(params) {
|
|
57
|
+
const { sessionId, task, url, success, summary, issues, screenshots, durationMs, traceViewerUrl, } = params;
|
|
58
|
+
const timestamp = new Date().toISOString();
|
|
59
|
+
const durationSec = (durationMs / 1000).toFixed(1);
|
|
60
|
+
const lines = [];
|
|
61
|
+
// Header
|
|
62
|
+
lines.push(`# Verification Report`);
|
|
63
|
+
lines.push('');
|
|
64
|
+
lines.push(`**Session:** \`${sessionId}\``);
|
|
65
|
+
lines.push(`**Generated:** ${timestamp}`);
|
|
66
|
+
lines.push(`**Duration:** ${durationSec}s`);
|
|
67
|
+
lines.push('');
|
|
68
|
+
// Task & URL
|
|
69
|
+
lines.push(`## Task`);
|
|
70
|
+
lines.push('');
|
|
71
|
+
lines.push(`**URL:** ${url}`);
|
|
72
|
+
lines.push('');
|
|
73
|
+
lines.push(`> ${task}`);
|
|
74
|
+
lines.push('');
|
|
75
|
+
// Result Summary
|
|
76
|
+
lines.push(`## Result`);
|
|
77
|
+
lines.push('');
|
|
78
|
+
const statusEmoji = success ? '✅' : '❌';
|
|
79
|
+
lines.push(`**Status:** ${statusEmoji} ${success ? 'PASSED' : 'ISSUES FOUND'}`);
|
|
80
|
+
lines.push('');
|
|
81
|
+
lines.push(`### Summary`);
|
|
82
|
+
lines.push('');
|
|
83
|
+
lines.push(summary);
|
|
84
|
+
lines.push('');
|
|
85
|
+
// Issues
|
|
86
|
+
if (issues && issues.length > 0) {
|
|
87
|
+
lines.push(`### Issues Found (${issues.length})`);
|
|
88
|
+
lines.push('');
|
|
89
|
+
for (const issue of issues) {
|
|
90
|
+
const severityEmoji = getSeverityEmoji(issue.severity);
|
|
91
|
+
lines.push(`#### ${severityEmoji} [${issue.severity}] Issue`);
|
|
92
|
+
lines.push('');
|
|
93
|
+
lines.push(issue.description);
|
|
94
|
+
lines.push('');
|
|
95
|
+
// Link to screenshot if referenced
|
|
96
|
+
if (issue.screenshot) {
|
|
97
|
+
const screenshotName = issue.screenshot;
|
|
98
|
+
const screenshotInfo = screenshots.find((s) => s.filename === screenshotName ||
|
|
99
|
+
s.filename.includes(screenshotName));
|
|
100
|
+
if (screenshotInfo) {
|
|
101
|
+
lines.push(`**Screenshot:**`);
|
|
102
|
+
lines.push('');
|
|
103
|
+
lines.push(``);
|
|
104
|
+
lines.push('');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Screenshots Gallery
|
|
110
|
+
if (screenshots.length > 0) {
|
|
111
|
+
lines.push(`## Screenshots (${screenshots.length})`);
|
|
112
|
+
lines.push('');
|
|
113
|
+
for (const screenshot of screenshots) {
|
|
114
|
+
const caption = formatScreenshotCaption(screenshot.filename);
|
|
115
|
+
lines.push(`### ${caption}`);
|
|
116
|
+
lines.push('');
|
|
117
|
+
lines.push(``);
|
|
118
|
+
lines.push('');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Footer with trace viewer link
|
|
122
|
+
if (traceViewerUrl) {
|
|
123
|
+
lines.push(`---`);
|
|
124
|
+
lines.push('');
|
|
125
|
+
lines.push(`**Full Trace:** [View in Playwright Trace Viewer](${traceViewerUrl})`);
|
|
126
|
+
lines.push('');
|
|
127
|
+
}
|
|
128
|
+
return lines.join('\n');
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=reportGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reportGenerator.js","sourceRoot":"","sources":["../../../src/commands/utils/reportGenerator.ts"],"names":[],"mappings":"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"}
|