diff --git a/CHANGELOG.md b/CHANGELOG.md index 29839910..eedc5ba8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,16 @@ ### Minor Changes +## 3.2.1 + +### Major Changes + +- Added support for Arbitrum and Optimism Sepolia webhook creation. + +### Minor Changes + +- API error messages return the actual error instead of [Object object] + ## 3.2.0 ### Major Changes diff --git a/src/api/notify-namespace.ts b/src/api/notify-namespace.ts index 1b25c9b6..f0d5d1b4 100644 --- a/src/api/notify-namespace.ts +++ b/src/api/notify-namespace.ts @@ -639,8 +639,10 @@ const WEBHOOK_NETWORK_TO_NETWORK: { [key: string]: Network } = { MATIC_AMOY: Network.MATIC_AMOY, ARB_MAINNET: Network.ARB_MAINNET, ARB_GOERLI: Network.ARB_GOERLI, + ARB_SEPOLIA: Network.ARB_SEPOLIA, OPT_MAINNET: Network.OPT_MAINNET, OPT_GOERLI: Network.OPT_GOERLI, + OPT_SEPOLIA: Network.OPT_SEPOLIA, BASE_MAINNET: Network.BASE_MAINNET, BASE_GOERLI: Network.BASE_GOERLI, BASE_SEPOLIA: Network.BASE_SEPOLIA diff --git a/src/internal/dispatch.ts b/src/internal/dispatch.ts index d51e0b32..4f612561 100644 --- a/src/internal/dispatch.ts +++ b/src/internal/dispatch.ts @@ -62,7 +62,9 @@ export async function requestHttpWithBackoff( throw err; } // TODO: Standardize all errors into AlchemyError - lastError = new Error(err.response.status + ': ' + err.response.data); + lastError = new Error( + err.response.status + ': ' + JSON.stringify(err.response.data) + ); if (!isRetryableHttpError(err, apiType)) { break; } diff --git a/test/integration/notify.test.ts b/test/integration/notify.test.ts index 22828eaf..cec2c6af 100644 --- a/test/integration/notify.test.ts +++ b/test/integration/notify.test.ts @@ -30,7 +30,7 @@ describe('E2E integration tests', () => { } ]; - const webhookUrl = 'https://temp-site.ngrok.io'; + const webhookUrl = 'https://www.example.com'; const graphqlQuery = '{ block { hash } }'; let addressWh: AddressActivityWebhook; @@ -277,14 +277,15 @@ describe('E2E integration tests', () => { }); it('create and delete NftActivityWebhook', async () => { + const network = Network.ETH_SEPOLIA; const nftActivityWebhook = await alchemy.notify.createWebhook( webhookUrl, WebhookType.NFT_ACTIVITY, - { filters: nftFilters, network: Network.ETH_GOERLI } + { filters: nftFilters, network } ); expect(nftActivityWebhook.url).toEqual(webhookUrl); expect(nftActivityWebhook.type).toEqual(WebhookType.NFT_ACTIVITY); - expect(nftActivityWebhook.network).toEqual(Network.ETH_GOERLI); + expect(nftActivityWebhook.network).toEqual(network); let response = await alchemy.notify.getAllWebhooks(); expect( response.webhooks.filter(wh => wh.id === nftActivityWebhook.id).length @@ -297,15 +298,16 @@ describe('E2E integration tests', () => { ).toEqual(0); }); - it('create and delete NftActivityWebhook', async () => { + it('create and delete NftMetadataUpdateWebhook', async () => { + const network = Network.ETH_MAINNET; const nftActivityWebhook = await alchemy.notify.createWebhook( webhookUrl, WebhookType.NFT_METADATA_UPDATE, - { filters: nftFilters, network: Network.ETH_GOERLI } + { filters: nftFilters, network } ); expect(nftActivityWebhook.url).toEqual(webhookUrl); expect(nftActivityWebhook.type).toEqual(WebhookType.NFT_METADATA_UPDATE); - expect(nftActivityWebhook.network).toEqual(Network.ETH_GOERLI); + expect(nftActivityWebhook.network).toEqual(network); let response = await alchemy.notify.getAllWebhooks(); expect( response.webhooks.filter(wh => wh.id === nftActivityWebhook.id).length