From de829f6dbab726f2d452427f60bb0264fb9460b2 Mon Sep 17 00:00:00 2001 From: cb-howardatcb <86798563+howard-at-cb@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:44:50 -0700 Subject: [PATCH 1/2] Webhook update hotfix (#289) * update webhook bugfix * address comments * Update CHANGELOG.md --- CHANGELOG.md | 5 +++++ src/coinbase/webhook.ts | 7 +++++-- src/tests/webhook_test.ts | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index add44b41..f7de1af4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +## [0.8.1] - 2024-10-09 + +### Fixed +- Fixed a bug that overwrites existing webhook notification URI when only updating a webhook's addresses + ## [0.8.0] - 2024-10-04 ### Added diff --git a/src/coinbase/webhook.ts b/src/coinbase/webhook.ts index c9bf3d15..b6a109d1 100644 --- a/src/coinbase/webhook.ts +++ b/src/coinbase/webhook.ts @@ -185,10 +185,13 @@ export class Webhook { notificationUri, eventTypeFilter, }: UpdateWebhookOptions): Promise { + const finalNotificationUri = notificationUri ?? this.getNotificationURI(); + const finalEventTypeFilter = eventTypeFilter ?? this.getEventTypeFilter(); + const result = await Coinbase.apiClients.webhook!.updateWebhook(this.getId()!, { - notification_uri: notificationUri, + notification_uri: finalNotificationUri, event_filters: this.getEventFilters()!, - event_type_filter: eventTypeFilter, + event_type_filter: finalEventTypeFilter, }); this.model = result.data; diff --git a/src/tests/webhook_test.ts b/src/tests/webhook_test.ts index 10139643..fc171d51 100644 --- a/src/tests/webhook_test.ts +++ b/src/tests/webhook_test.ts @@ -206,10 +206,27 @@ describe("Webhook", () => { expect(Coinbase.apiClients.webhook!.updateWebhook).toHaveBeenCalledWith("test-id", { notification_uri: "https://new-url.com/callback", event_filters: [{ contract_address: "0x...", from_address: "0x...", to_address: "0x..." }], + event_type_filter: { + addresses: ["0xa55C5950F7A3C42Fa5799B2Cac0e455774a07382"], + wallet_id: "w1", + }, }); expect(webhook.getNotificationURI()).toBe("https://new-url.com/callback"); }); + it("should update the webhook address list only", async () => { + const webhook = Webhook.init(mockModel); + await webhook.update({ eventTypeFilter: { addresses: ["0x1..", "0x2.."] } }); + + expect(Coinbase.apiClients.webhook!.updateWebhook).toHaveBeenCalledWith("test-id", { + notification_uri: "https://example.com/callback", + event_filters: [{ contract_address: "0x...", from_address: "0x...", to_address: "0x..." }], + event_type_filter: { addresses: ["0x1..", "0x2.."] }, + }); + + expect(webhook.getNotificationURI()).toBe("https://example.com/callback"); + expect(webhook.getEventTypeFilter()?.addresses).toEqual(["0x1..", "0x2.."]); + }); it("should update both the webhook notification URI and the list of addresses monitoring", async () => { const mockModel: WebhookModel = { id: "test-id", From 75ebf0bdd9c996e22c12243ed1aa21e1a843b347 Mon Sep 17 00:00:00 2001 From: cb-howardatcb <86798563+howard-at-cb@users.noreply.github.com> Date: Fri, 11 Oct 2024 12:54:14 -0700 Subject: [PATCH 2/2] Update webhook quickstart guide and package.json (#293) * Update README.md * Revert "Update README.md" This reverts commit 9a7fb38a56c697ced3ca56f191798dd6baed66c3. * Update README.md * 0.8.1 --- package-lock.json | 4 ++-- package.json | 2 +- quickstart-template/webhook/README.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 96475b08..71386877 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@coinbase/coinbase-sdk", - "version": "0.6.1", + "version": "0.8.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@coinbase/coinbase-sdk", - "version": "0.6.1", + "version": "0.8.1", "license": "ISC", "dependencies": { "@scure/bip32": "^1.4.0", diff --git a/package.json b/package.json index 9a854db6..eba756a6 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "license": "ISC", "description": "Coinbase Platform SDK", "repository": "https://github.com/coinbase/coinbase-sdk-nodejs", - "version": "0.8.0", + "version": "0.8.1", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { diff --git a/quickstart-template/webhook/README.md b/quickstart-template/webhook/README.md index 65308036..5e982f78 100644 --- a/quickstart-template/webhook/README.md +++ b/quickstart-template/webhook/README.md @@ -23,13 +23,13 @@ curl -X POST -H "Content-Type:application/json" -d '{"app": "webhook"}' http://l ## Public Webhook App To setup a temporary public URL that points to this local webhook app, -you can use [Pinggy](https://pinggy.io/) in another terminal window: +you can use [Pinggy](https://pinggy.io/) or [ngrok](https://ngrok.com/) in another terminal window: ```bash ssh -p 443 -R0:localhost:3000 -L4300:localhost:4300 qr@a.pinggy.io ``` -You can also use [Vercel](https://vercel.com/) or other hosting solutions for your webhook app. +You can also use [Vercel](https://vercel.com/), [webhook.site](https://webhook.site/) or other hosting solutions for your webhook app. Once the public webhook app is setup, copy the URL provided and test it with: