(responseBody: unknown)
| 196 | * with the expected shape. |
| 197 | */ |
| 198 | export function parseApiErrorResponseBody(responseBody: unknown): { |
| 199 | errorCode?: string |
| 200 | message?: string |
| 201 | countryCode?: string |
| 202 | countryBlockReason?: string |
| 203 | ipPrivacySignals?: string[] |
| 204 | } { |
| 205 | if (typeof responseBody !== 'string') return {} |
| 206 | try { |
| 207 | const parsed: unknown = JSON.parse(responseBody) |
| 208 | if (!parsed || typeof parsed !== 'object') return {} |
| 209 | const result: { |
| 210 | errorCode?: string |
| 211 | message?: string |
| 212 | countryCode?: string |
| 213 | countryBlockReason?: string |
| 214 | ipPrivacySignals?: string[] |
| 215 | } = {} |
| 216 | if ( |
| 217 | 'error' in parsed && |
| 218 | typeof (parsed as { error: unknown }).error === 'string' |
| 219 | ) { |
| 220 | result.errorCode = (parsed as { error: string }).error |
| 221 | } |
| 222 | if ( |
| 223 | 'message' in parsed && |
| 224 | typeof (parsed as { message: unknown }).message === 'string' |
| 225 | ) { |
| 226 | result.message = (parsed as { message: string }).message |
| 227 | } |
| 228 | if ( |
| 229 | 'countryCode' in parsed && |
| 230 | typeof (parsed as { countryCode: unknown }).countryCode === 'string' |
| 231 | ) { |
| 232 | result.countryCode = (parsed as { countryCode: string }).countryCode |
| 233 | } |
| 234 | if ( |
| 235 | 'countryBlockReason' in parsed && |
| 236 | typeof (parsed as { countryBlockReason: unknown }).countryBlockReason === |
| 237 | 'string' |
| 238 | ) { |
| 239 | result.countryBlockReason = ( |
| 240 | parsed as { countryBlockReason: string } |
| 241 | ).countryBlockReason |
| 242 | } |
| 243 | if ('ipPrivacySignals' in parsed) { |
| 244 | const signals = (parsed as { ipPrivacySignals: unknown }).ipPrivacySignals |
| 245 | if (Array.isArray(signals)) { |
| 246 | result.ipPrivacySignals = signals.filter( |
| 247 | (signal): signal is string => typeof signal === 'string', |
| 248 | ) |
| 249 | } |
| 250 | } |
| 251 | return result |
| 252 | } catch { |
| 253 | return {} |
| 254 | } |
| 255 | } |
no test coverage detected