()
| 161 | * Tries enhanced fingerprinting first, falls back to legacy if it fails. |
| 162 | */ |
| 163 | export async function calculateFingerprint(): Promise<string> { |
| 164 | try { |
| 165 | const fingerprint = await calculateEnhancedFingerprint() |
| 166 | logger.debug( |
| 167 | { |
| 168 | fingerprintType: 'enhanced_cli', |
| 169 | fingerprintId: fingerprint.substring(0, 20) + '...', |
| 170 | }, |
| 171 | 'Enhanced CLI fingerprint generated successfully', |
| 172 | ) |
| 173 | trackEvent(AnalyticsEvent.FINGERPRINT_GENERATED, { |
| 174 | fingerprintType: 'enhanced_cli', |
| 175 | success: true, |
| 176 | }) |
| 177 | return fingerprint |
| 178 | } catch (enhancedError) { |
| 179 | logger.info( |
| 180 | { |
| 181 | errorMessage: |
| 182 | enhancedError instanceof Error ? enhancedError.message : String(enhancedError), |
| 183 | fingerprintType: 'enhanced_failed_fallback', |
| 184 | }, |
| 185 | 'Enhanced CLI fingerprinting failed, using legacy fallback', |
| 186 | ) |
| 187 | |
| 188 | try { |
| 189 | const fingerprint = calculateLegacyFingerprint() |
| 190 | logger.debug( |
| 191 | { |
| 192 | fingerprintType: 'legacy_fallback', |
| 193 | fingerprintId: fingerprint, |
| 194 | }, |
| 195 | 'Legacy fingerprint generated successfully as fallback', |
| 196 | ) |
| 197 | trackEvent(AnalyticsEvent.FINGERPRINT_GENERATED, { |
| 198 | fingerprintType: 'legacy', |
| 199 | success: true, |
| 200 | fallbackReason: |
| 201 | enhancedError instanceof Error ? enhancedError.message : 'unknown', |
| 202 | }) |
| 203 | return fingerprint |
| 204 | } catch (legacyError) { |
| 205 | logger.error( |
| 206 | { |
| 207 | errorMessage: |
| 208 | legacyError instanceof Error ? legacyError.message : String(legacyError), |
| 209 | fingerprintType: 'failed', |
| 210 | }, |
| 211 | 'Both enhanced and legacy fingerprint generation failed', |
| 212 | ) |
| 213 | throw new Error('Fingerprint generation failed') |
| 214 | } |
| 215 | } |
| 216 | } |
| 217 | |
| 218 | /** |
| 219 | * Synchronous fingerprint generation (legacy only). |
no test coverage detected