93 lines
2.9 KiB
JavaScript
93 lines
2.9 KiB
JavaScript
// api_client.js
|
|
const BASE_URL = 'https://evie.askeveai.com/api/api/v1';
|
|
|
|
class EveAIApiClient {
|
|
constructor(z, bundle) {
|
|
this.z = z;
|
|
this.bundle = bundle;
|
|
}
|
|
|
|
async ensure_valid_token() {
|
|
const currentTime = Math.floor(Date.now() / 1000); // Current time in seconds
|
|
const token = this.bundle.authData.access_token;
|
|
const tokenExpiry = this.bundle.authData.token_expiry;
|
|
// Check if token is expired or will expire in next 30 seconds
|
|
if (!token || !tokenExpiry || currentTime + 30 >= tokenExpiry) {
|
|
this.z.console.log('Token missing or expiring soon, requesting new token...');
|
|
|
|
const response = await this.z.request({
|
|
url: `${BASE_URL}/auth/token`,
|
|
method: 'POST',
|
|
body: {
|
|
tenant_id: this.bundle.authData.tenant_id,
|
|
api_key: this.bundle.authData.api_key,
|
|
},
|
|
});
|
|
|
|
if (response.status !== 200) {
|
|
throw new Error(`Failed to get access token: ${response.status}`);
|
|
}
|
|
|
|
const data = response.json;
|
|
|
|
// Update the bundle's authData
|
|
this.bundle.authData.access_token = data.access_token;
|
|
this.bundle.authData.token_expiry = currentTime + data.expires_in;
|
|
|
|
this.z.console.log('New token obtained:', {
|
|
token_prefix: data.access_token.substring(0, 10) + '...',
|
|
expires_in: data.expires_in,
|
|
expiry_time: this.bundle.authData.token_expiry
|
|
});
|
|
|
|
return data.access_token;
|
|
}
|
|
|
|
this.z.console.log('Using existing valid token');
|
|
return token;
|
|
}
|
|
|
|
async make_request(method, endpoint, data = null) {
|
|
try {
|
|
// Ensure we have a valid token
|
|
const token = await this.ensure_valid_token();
|
|
|
|
this.z.console.log('Making request:', {
|
|
method,
|
|
endpoint,
|
|
token_prefix: token.substring(0, 10) + '...'
|
|
});
|
|
|
|
const requestConfig = {
|
|
url: `${BASE_URL}${endpoint}`,
|
|
method,
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`,
|
|
'Content-Type': 'application/json',
|
|
},
|
|
};
|
|
|
|
if (data) {
|
|
requestConfig.body = data;
|
|
}
|
|
|
|
const response = await this.z.request(requestConfig);
|
|
|
|
this.z.console.log('Response received:', {
|
|
status: response.status,
|
|
data: response.json
|
|
});
|
|
|
|
return response.json;
|
|
|
|
} catch (error) {
|
|
this.z.console.error('Request failed:', {
|
|
error: error.message,
|
|
response: error.response
|
|
});
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = EveAIApiClient; |