#!/usr/bin/env node
/**
* Comprehensive search for Bank Leumi in all available data
*/
const { spawn } = require('child_process');
async function findBankLeumi() {
console.log('🔍 COMPREHENSIVE SEARCH FOR BANK LEUMI');
console.log('=' .repeat(60));
console.log('Searching in:');
console.log('1. AllCloud payer accounts (319 accounts)');
console.log('2. MSP customers/divisions');
console.log('3. User divisions structure');
console.log('4. Any other available endpoints');
console.log('');
const server = spawn('node', ['dist/index.js'], {
stdio: ['pipe', 'pipe', 'pipe'],
env: process.env
});
let responses = {};
let responseBuffer = '';
let allDebugOutput = [];
server.stdout.on('data', (data) => {
responseBuffer += data.toString();
const lines = responseBuffer.split('\n');
for (let i = 0; i < lines.length - 1; i++) {
const line = lines[i].trim();
if (line) {
try {
const response = JSON.parse(line);
if (response.id) {
responses[response.id] = response;
}
} catch (e) {}
}
}
responseBuffer = lines[lines.length - 1];
});
server.stderr.on('data', (data) => {
const msg = data.toString();
allDebugOutput.push(msg);
// Show any mentions of Leumi or banks
if (msg.toLowerCase().includes('leumi') ||
msg.toLowerCase().includes('bank') ||
msg.toLowerCase().includes('division')) {
console.log('🔍', msg.trim());
}
});
await new Promise(resolve => setTimeout(resolve, 3000));
console.log('📡 Step 1: Initialize and authenticate...');
server.stdin.write(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "initialize",
params: {
protocolVersion: "0.1.0",
capabilities: {},
clientInfo: { name: "leumi-search", version: "1.0.0" }
}
}) + '\n');
await new Promise(resolve => setTimeout(resolve, 1000));
// Auth with AllCloud
server.stdin.write(JSON.stringify({
jsonrpc: "2.0",
id: 2,
method: "tools/call",
params: {
name: "authenticate_user",
arguments: {
username: "david+allcloud@umbrellacost.com",
password: "B4*zcI7#F7poEC"
}
}
}) + '\n');
await new Promise(resolve => setTimeout(resolve, 8000));
console.log('\n🎯 Step 2: Search in MSP customers...');
server.stdin.write(JSON.stringify({
jsonrpc: "2.0",
id: 10,
method: "tools/call",
params: {
name: "api___msp_customers",
arguments: {}
}
}) + '\n');
await new Promise(resolve => setTimeout(resolve, 5000));
console.log('\n👥 Step 3: Search in users endpoint...');
server.stdin.write(JSON.stringify({
jsonrpc: "2.0",
id: 11,
method: "tools/call",
params: {
name: "api___users",
arguments: {}
}
}) + '\n');
await new Promise(resolve => setTimeout(resolve, 5000));
console.log('\n🔍 Step 4: Trigger customer detection with Bank Leumi query...');
server.stdin.write(JSON.stringify({
jsonrpc: "2.0",
id: 12,
method: "tools/call",
params: {
name: "api___recommendationsNew_heatmap_summary",
arguments: {
userQuery: "Show me Bank Leumi cost recommendations and optimization opportunities"
}
}
}) + '\n');
await new Promise(resolve => setTimeout(resolve, 8000));
// Analyze all responses
console.log('\n📊 ANALYSIS RESULTS:');
console.log('=' .repeat(60));
// Check MSP customers
if (responses[10]?.result?.content?.[0]?.text) {
const mspText = responses[10].result.content[0].text;
console.log('\n1️⃣ MSP CUSTOMERS ANALYSIS:');
if (mspText.toLowerCase().includes('leumi')) {
console.log('✅ "Leumi" found in MSP customers!');
const leumiLines = mspText.split('\n').filter(line =>
line.toLowerCase().includes('leumi')
);
leumiLines.forEach(line => {
console.log(` 📋 ${line.trim()}`);
});
} else {
console.log('❌ "Leumi" NOT found in MSP customers response');
}
// Check for JSON structure
const jsonMatch = mspText.match(/```json\s*([\s\S]*?)\s*```/);
if (jsonMatch) {
try {
const data = JSON.parse(jsonMatch[1]);
console.log(` 📊 Found ${Array.isArray(data) ? data.length : 'N/A'} MSP customer records`);
if (Array.isArray(data)) {
// Search through all customer records for Leumi
const leumiCustomers = data.filter(customer => {
const name = (customer.customerName || customer.customer_name || '').toLowerCase();
const code = (customer.customerCode || customer.customer_code || '').toLowerCase();
return name.includes('leumi') || code.includes('leumi');
});
if (leumiCustomers.length > 0) {
console.log(` 🎯 BANK LEUMI FOUND IN MSP CUSTOMERS!`);
leumiCustomers.forEach((customer, index) => {
console.log(` ${index + 1}. Name: "${customer.customerName || customer.customer_name}"`);
console.log(` Code: "${customer.customerCode || customer.customer_code}"`);
console.log(` ID: ${customer.customerId || customer.customer_id}`);
console.log(` Account Key: ${customer.accountKey || customer.account_key}`);
});
} else {
console.log(` ❌ Bank Leumi not found in ${data.length} MSP customer records`);
}
}
} catch (e) {
console.log(' ⚠️ Failed to parse MSP customers JSON');
}
}
} else {
console.log('\n1️⃣ ❌ No MSP customers response');
}
// Check users response
if (responses[11]?.result?.content?.[0]?.text) {
const usersText = responses[11].result.content[0].text;
console.log('\n2️⃣ USERS ENDPOINT ANALYSIS:');
if (usersText.toLowerCase().includes('leumi')) {
console.log('✅ "Leumi" found in users response!');
const leumiLines = usersText.split('\n').filter(line =>
line.toLowerCase().includes('leumi')
);
leumiLines.forEach(line => {
console.log(` 📋 ${line.trim()}`);
});
} else {
console.log('❌ "Leumi" NOT found in users response');
}
// Look for divisions data
if (usersText.includes('divisionsIds') || usersText.includes('divisionId')) {
console.log('✅ Contains division data');
// Try to find division structure
const jsonMatch = usersText.match(/```json\s*([\s\S]*?)\s*```/);
if (jsonMatch) {
try {
const userData = JSON.parse(jsonMatch[1]);
if (userData.divisionsIds) {
console.log(` 📊 User has ${userData.divisionsIds.length} division IDs: ${userData.divisionsIds.join(', ')}`);
}
if (userData.accounts && Array.isArray(userData.accounts)) {
console.log(` 📊 User has ${userData.accounts.length} accounts`);
// Check accounts for divisions
const divisionMap = new Map();
userData.accounts.forEach(account => {
const divId = account.divisionId || 0;
if (!divisionMap.has(divId)) {
divisionMap.set(divId, []);
}
divisionMap.get(divId).push(account.accountName);
});
console.log(` 📋 Accounts grouped by division:`);
for (const [divId, accounts] of divisionMap.entries()) {
console.log(` Division ${divId}: ${accounts.length} accounts`);
if (divId !== 0) {
accounts.slice(0, 2).forEach(acc => {
console.log(` - ${acc}`);
});
}
}
}
} catch (e) {
console.log(' ⚠️ Failed to parse users JSON');
}
}
}
} else {
console.log('\n2️⃣ ❌ No users response');
}
// Check detection attempt
console.log('\n3️⃣ CUSTOMER DETECTION ATTEMPT:');
if (responses[12]) {
if (responses[12].error) {
console.log('❌ Detection query failed:', responses[12].error);
} else {
console.log('✅ Detection query succeeded');
}
} else {
console.log('⏳ No detection response');
}
// Search through all debug output for any Leumi mentions
console.log('\n4️⃣ DEBUG OUTPUT SEARCH:');
const leumiMentions = allDebugOutput.filter(line =>
line.toLowerCase().includes('leumi')
);
if (leumiMentions.length > 0) {
console.log(`✅ Found ${leumiMentions.length} mentions of "Leumi" in debug output:`);
leumiMentions.forEach((mention, index) => {
console.log(` ${index + 1}. ${mention.trim()}`);
});
} else {
console.log('❌ No mentions of "Leumi" found in debug output');
}
server.kill();
console.log('\n🎯 CONCLUSION:');
console.log('=' .repeat(60));
console.log('If Bank Leumi is not found in any of these sources,');
console.log('it might be:');
console.log('1. In a different MSP environment/tenant');
console.log('2. Named differently (e.g., "Leumi Bank", "Bank Leumi Ltd")');
console.log('3. Only accessible via the frontend API with specific headers');
console.log('4. In the divisions table but not exposed via current endpoints');
console.log('\n✅ Search complete');
}
findBankLeumi().catch(console.error);