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' }]
      }
    };
  }
};