Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
195703495c |
17
RELEASE
17
RELEASE
@@ -1,6 +1,6 @@
|
||||
IPFS hash of the deployment:
|
||||
- CIDv0: `QmfTNnuaGjKgsrCc3CrXy8JZCw1gDPaWCzmXwt7GvDRXNK`
|
||||
- CIDv1: `bafybeih6j67orz7joqshoxrbzvxmqlipzfdlpuw7d252kjjqbpsjcpmnnq`
|
||||
- CIDv0: `QmRfmKBiCcSDFdGRZuJKqPtyenCsCFasgiwNvTJQMrbjT6`
|
||||
- CIDv1: `bafybeibrpcihc5cqqzntesoc5dtxyili3uvyrfmxi7fcx4uteto7ucpj6e`
|
||||
|
||||
The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org).
|
||||
|
||||
@@ -10,10 +10,15 @@ You can also access the Uniswap Interface from an IPFS gateway.
|
||||
Your Uniswap settings are never remembered across different URLs.
|
||||
|
||||
IPFS gateways:
|
||||
- https://bafybeih6j67orz7joqshoxrbzvxmqlipzfdlpuw7d252kjjqbpsjcpmnnq.ipfs.dweb.link/
|
||||
- https://bafybeih6j67orz7joqshoxrbzvxmqlipzfdlpuw7d252kjjqbpsjcpmnnq.ipfs.cf-ipfs.com/
|
||||
- [ipfs://QmfTNnuaGjKgsrCc3CrXy8JZCw1gDPaWCzmXwt7GvDRXNK/](ipfs://QmfTNnuaGjKgsrCc3CrXy8JZCw1gDPaWCzmXwt7GvDRXNK/)
|
||||
- https://bafybeibrpcihc5cqqzntesoc5dtxyili3uvyrfmxi7fcx4uteto7ucpj6e.ipfs.dweb.link/
|
||||
- https://bafybeibrpcihc5cqqzntesoc5dtxyili3uvyrfmxi7fcx4uteto7ucpj6e.ipfs.cf-ipfs.com/
|
||||
- [ipfs://QmRfmKBiCcSDFdGRZuJKqPtyenCsCFasgiwNvTJQMrbjT6/](ipfs://QmRfmKBiCcSDFdGRZuJKqPtyenCsCFasgiwNvTJQMrbjT6/)
|
||||
|
||||
### 5.2.1 (2023-12-13)
|
||||
### 5.2.2 (2023-12-15)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **web:** disambiguate 3P ProviderRpcErrors (#5482) 0f8a086
|
||||
|
||||
|
||||
|
||||
@@ -187,4 +187,17 @@ describe('beforeSend', () => {
|
||||
expect(beforeSend(ERROR, { originalException })).toBeNull()
|
||||
})
|
||||
})
|
||||
|
||||
describe('ProviderRpcErrors', () => {
|
||||
it('augments the event with an exception from the ProviderRpcError', () => {
|
||||
const exception = { mechanism: { handled: false, synthetic: true } }
|
||||
const event = { exception: { values: [exception] } } as ErrorEvent
|
||||
const originalException = { code: -32603, message: 'Internal JSON-RPC error', data: '[Object]' }
|
||||
beforeSend(event, { originalException })
|
||||
expect(event.exception?.values).toEqual([
|
||||
exception,
|
||||
{ type: 'ProviderRpcError', value: `${originalException.code}: ${originalException.message}` },
|
||||
])
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { ClientOptions, ErrorEvent, EventHint } from '@sentry/types'
|
||||
import { ProviderRpcError } from '@web3-react/types'
|
||||
import { didUserReject } from 'utils/swapErrorToUserReadableMessage'
|
||||
|
||||
// `responseStatus` is only currently supported on certain browsers.
|
||||
@@ -18,12 +19,25 @@ export const beforeSend: Required<ClientOptions>['beforeSend'] = (event: ErrorEv
|
||||
return null
|
||||
}
|
||||
|
||||
const exception = event.exception?.values?.[0]
|
||||
if (exception?.mechanism && exception.mechanism.synthetic && !exception.mechanism.handled) {
|
||||
// ProviderRpcErrors occur frequently through 3P providers, so it's good to disambiguate them.
|
||||
// This allows us to see which errors are actually frequent, vs which ones are extension-specific.
|
||||
if (isProviderRpcError(hint.originalException)) {
|
||||
event.exception?.values?.push({
|
||||
type: 'ProviderRpcError',
|
||||
value: `${hint.originalException.code}: ${hint.originalException.message}`,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
updateRequestUrl(event)
|
||||
|
||||
return event
|
||||
}
|
||||
|
||||
type ErrorLike = Partial<Error> & Required<Pick<Error, 'message'>>
|
||||
|
||||
function isErrorLike(error: unknown): error is ErrorLike {
|
||||
return error instanceof Object && 'message' in error && typeof (error as Partial<ErrorLike>)?.message === 'string'
|
||||
}
|
||||
@@ -106,3 +120,13 @@ function shouldRejectError(error: EventHint['originalException']) {
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
function isProviderRpcError(error: unknown): error is ProviderRpcError {
|
||||
return (
|
||||
error instanceof Object &&
|
||||
'code' in error &&
|
||||
typeof (error as Partial<ProviderRpcError>)?.code === 'number' &&
|
||||
'message' in error &&
|
||||
typeof (error as Partial<ProviderRpcError>)?.message === 'string'
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user