File size: 6,372 Bytes
25f22bf e4de23f 25f22bf e4de23f 25f22bf e4de23f 25f22bf |
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 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
import apiClient from './apiClient';
class LinkedInAuthService {
/**
* Initiate LinkedIn OAuth flow
* @returns {Promise} Promise that resolves to authorization URL and state
*/
async initiateAuth() {
try {
const response = await apiClient.post('/accounts', {
account_name: 'LinkedIn Account',
social_network: 'LinkedIn'
});
if (response.data.success && response.data.authorization_url) {
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.log('π [LinkedIn] Auth initiated successfully');
}
return {
success: true,
authorization_url: response.data.authorization_url,
state: response.data.state
};
} else {
throw new Error(response.data.message || 'Failed to initiate LinkedIn authentication');
}
} catch (error) {
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.error('π [LinkedIn] Auth initiation error:', error.response?.data || error.message);
}
return {
success: false,
message: error.response?.data?.message || 'Failed to start LinkedIn authentication'
};
}
}
/**
* Handle LinkedIn OAuth callback
* @param {string} code - Authorization code from LinkedIn
* @param {string} state - State parameter for security verification
* @returns {Promise} Promise that resolves to callback result
*/
async handleCallback(code, state) {
try {
// DEBUG: Log callback request
console.log('π [LinkedIn] Sending callback request to backend...');
console.log('π [LinkedIn] Callback payload:', {
code: code.substring(0, 20) + '...',
state: state,
social_network: 'LinkedIn'
});
const response = await apiClient.post('/accounts/callback', {
code: code,
state: state,
social_network: 'LinkedIn'
});
// DEBUG: Log callback response
console.log('π [LinkedIn] Backend response received:', response);
console.log('π [LinkedIn] Response status:', response.status);
console.log('π [LinkedIn] Response data:', response.data);
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.log('π [LinkedIn] OAuth callback handled successfully');
}
return response.data;
} catch (error) {
// DEBUG: Log callback error
console.error('π [LinkedIn] OAuth callback error:', error);
console.error('π [LinkedIn] Error details:', {
message: error.message,
response: error.response?.data,
status: error.response?.status,
headers: error.response?.headers
});
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.error('π [LinkedIn] OAuth callback error:', error.response?.data || error.message);
}
return {
success: false,
message: error.response?.data?.message || 'Failed to complete LinkedIn authentication'
};
}
}
/**
* Get all LinkedIn accounts for the current user
* @returns {Promise} Promise that resolves to accounts data
*/
async getLinkedInAccounts() {
try {
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.log('π [LinkedIn] Fetching LinkedIn accounts...');
}
const response = await apiClient.get('/accounts');
// Handle different response formats
let accounts = [];
if (response.data && response.data.success && response.data.accounts) {
// Format: { success: true, accounts: [...] }
accounts = response.data.accounts;
} else if (Array.isArray(response.data)) {
// Format: [...]
accounts = response.data;
} else {
throw new Error('Unexpected response format from API');
}
// Filter for LinkedIn accounts only
const linkedinAccounts = accounts.filter(
account => account && account.social_network && account.social_network.toLowerCase() === 'linkedin'
);
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.log('π [LinkedIn] Retrieved LinkedIn accounts:', linkedinAccounts);
}
return { success: true, accounts: linkedinAccounts };
} catch (error) {
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.error('π [LinkedIn] Get LinkedIn accounts error:', error.response?.data || error.message);
}
return { success: false, accounts: [], message: error.response?.data?.message || 'Failed to fetch LinkedIn accounts' };
}
}
/**
* Delete a LinkedIn account
* @param {string} accountId - Account ID to delete
* @returns {Promise} Promise that resolves to deletion result
*/
async deleteLinkedInAccount(accountId) {
try {
const response = await apiClient.delete(`/accounts/${accountId}`);
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.log('π [LinkedIn] LinkedIn account deleted successfully');
}
return response.data;
} catch (error) {
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.error('π [LinkedIn] Delete LinkedIn account error:', error.response?.data || error.message);
}
return {
success: false,
message: error.response?.data?.message || 'Failed to delete LinkedIn account'
};
}
}
/**
* Set a LinkedIn account as primary
* @param {string} accountId - Account ID to set as primary
* @returns {Promise} Promise that resolves to update result
*/
async setPrimaryAccount(accountId) {
try {
const response = await apiClient.put(`/accounts/${accountId}/primary`);
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.log('π [LinkedIn] Primary account set successfully');
}
return response.data;
} catch (error) {
if (import.meta.env.VITE_NODE_ENV === 'development') {
console.error('π [LinkedIn] Set primary account error:', error.response?.data || error.message);
}
return {
success: false,
message: error.response?.data?.message || 'Failed to set primary account'
};
}
}
}
export default new LinkedInAuthService(); |