Spaces:
Running
Running
File size: 5,575 Bytes
e253bc0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | import {
InternalAccount,
CitiTransaction,
CustomerProfileResponse,
AuthResponse,
UserSession,
AccountsGroupDetailsList
} from '../types/index';
// Unified mock account data consistent with Citi OpenAPI structures
const MOCK_ACCOUNTS_LIST: InternalAccount[] = [
{
id: 'citi_acc_99201',
productName: 'Corporate Mastery Checking',
accountNickname: 'Main Ops Node',
displayAccountNumber: 'XXXXXX9594',
currency: 'USD',
status: 'ACTIVE',
currentBalance: 1245000.50,
availableBalance: 1240000.00,
institutionName: 'Citi US',
connectionId: 'CITI-G-001'
},
{
id: 'citi_acc_44102',
productName: 'Elite Treasury Savings',
displayAccountNumber: 'XXXXXX1022',
currency: 'USD',
status: 'ACTIVE',
currentBalance: 5200450.00,
availableBalance: 5200450.00,
institutionName: 'Citi US',
connectionId: 'CITI-G-002'
}
];
export const apiClient = {
auth: {
async me(): Promise<AuthResponse> {
const user = localStorage.getItem('lumina_user');
return user ? { isAuthenticated: true, user: JSON.parse(user) } : { isAuthenticated: false, user: null };
},
async register(username: string, password: string) {
const users = JSON.parse(localStorage.getItem('lumina_registry') || '{}');
if (users[username]) return { success: false, error: 'Identity already exists.' };
users[username] = { password, role: 'Root Admin' };
localStorage.setItem('lumina_registry', JSON.stringify(users));
return { success: true };
},
async login(username: string, password?: string) {
const users = JSON.parse(localStorage.getItem('lumina_registry') || '{"alex":{"password":"password123","role":"Root Admin"}}');
if (users[username] && users[username].password === password) {
const user = { id: 'USR-1', name: username, role: users[username].role, lastLogin: new Date().toISOString() };
localStorage.setItem('lumina_user', JSON.stringify(user));
return { success: true, user };
}
return { success: false, error: 'Identity rejected credentials.' };
},
async logout() {
localStorage.removeItem('lumina_user');
return { success: true };
}
},
chat: {
async getHistory() {
return JSON.parse(localStorage.getItem('lumina_chat_history') || '[]');
},
async saveMessage(role: string, content: string) {
const history = JSON.parse(localStorage.getItem('lumina_chat_history') || '[]');
history.push({ id: Date.now(), role, content, timestamp: new Date().toISOString() });
localStorage.setItem('lumina_chat_history', JSON.stringify(history));
}
},
async getRegistryNodes(): Promise<InternalAccount[]> {
return MOCK_ACCOUNTS_LIST;
},
async getRegistryDetails(): Promise<AccountsGroupDetailsList> {
return {
accountGroupDetails: [
{
accountGroup: "CHECKING",
checkingAccountsDetails: MOCK_ACCOUNTS_LIST.filter(a => a.productName.includes('Checking')).map(a => ({
accountId: a.id,
productName: a.productName,
displayAccountNumber: a.displayAccountNumber,
currencyCode: a.currency,
accountStatus: a.status as 'ACTIVE',
currentBalance: a.currentBalance,
availableBalance: a.availableBalance,
accountDescription: a.productName,
balanceType: 'ASSET'
}))
}
]
};
},
async getTransactions(accountId: string): Promise<CitiTransaction[]> {
return [
{
accountId,
currencyCode: 'USD',
transactionAmount: -25000.00,
transactionDate: new Date().toISOString().split('T')[0],
transactionDescription: 'QUANTUM_COMPUTE_Q3_ALLOCATION',
transactionId: 'TXN_C_' + Math.random().toString(36).substring(7).toUpperCase(),
transactionStatus: 'POSTED',
transactionType: 'PAYMENT',
displayAccountNumber: 'XXXXXX9594'
},
{
accountId,
currencyCode: 'USD',
transactionAmount: 14200.50,
transactionDate: new Date().toISOString().split('T')[0],
transactionDescription: 'NODE_ALPHA_INCENTIVE_PAYOUT',
transactionId: 'TXN_C_' + Math.random().toString(36).substring(7).toUpperCase(),
transactionStatus: 'POSTED',
transactionType: 'CREDIT',
displayAccountNumber: 'XXXXXX9594'
}
];
},
async getStatements(): Promise<any> {
return {
statements: [
{ statementId: 'STMT-001', statementDate: '2024-03-01', productFamily: 'Checking', accountId: 'citi_acc_99201' },
{ statementId: 'STMT-002', statementDate: '2024-02-01', productFamily: 'Checking', accountId: 'citi_acc_99201' }
]
};
},
async getStatementDetails(id: string): Promise<any> {
return {
dataPayload: JSON.stringify({
encryptedPayload: {
header: { alg: 'RSA-OAEP-4096', typ: 'JWT' },
iv: 'q7x2...m9l0',
data: 'base64_payload_artifact'
}
})
};
},
async getCustomerProfile(accountId: string): Promise<CustomerProfileResponse> {
return {
customer: { firstName: 'Alex', lastName: 'Rivera', title: 'Mx.', companyName: 'Lumina Quantum Systems' },
contacts: {
emails: ['a.rivera@luminaquantum.io'],
addresses: [{ addressLine1: '401 Quantum Drive', city: 'Palo Alto', region: 'CA', postalCode: '94304', country: 'US', type: 'BUSINESS' }],
phones: [{ type: 'CELL', country: '1', number: '9542312002' }]
}
};
}
}; |