Skip to content

Unhandled webhook event on charge.refund.updated #114

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
yinghaochan opened this issue Aug 28, 2024 · 3 comments
Open

Unhandled webhook event on charge.refund.updated #114

yinghaochan opened this issue Aug 28, 2024 · 3 comments
Labels
bug Something isn't working

Comments

@yinghaochan
Copy link

yinghaochan commented Aug 28, 2024

Bug report

Looks like it's not on the list of webhooks in the README.md

Logs from docker

Error: Unhandled webhook event
    at /app/dist/routes/webhooks.js:262:44
    at step (/app/dist/routes/webhooks.js:33:23)
    at Object.next (/app/dist/routes/webhooks.js:14:53)
    at /app/dist/routes/webhooks.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/app/dist/routes/webhooks.js:4:12)
    at Object.handler (/app/dist/routes/webhooks.js:61:61)
    at preHandlerCallback (/app/node_modules/fastify/lib/handleRequest.js:137:37)
    at validationCompleted (/app/node_modules/fastify/lib/handleRequest.js:121:5)
    at preValidationCallback (/app/node_modules/fastify/lib/handleRequest.js:98:5)
{
    "level": "error",
    "time": "2024-08-28T12:46:04.707Z",
    "pid": 13,
    "hostname": "supabase-stripe-sync-engine-778859f98-7lnvx",
    "reqId": "req-7",
    "req": {
        "method": "POST",
        "url": "/webhooks",
        "hostname": "yhc-dev-kfwzw.ondigitalocean.app",
        "remoteAddress": "10.244.3.189",
        "remotePort": 40750
    },
    "res": { "statusCode": 500 },
    "err": {
        "type": "Error",
        "message": "Unhandled webhook event",
        "stack": "Error: Unhandled webhook event\n    at /app/dist/routes/webhooks.js:262:44\n    at step (/app/dist/routes/webhooks.js:33:23)\n    at Object.next (/app/dist/routes/webhooks.js:14:53)\n    at /app/dist/routes/webhooks.js:8:71\n    at new Promise (<anonymous>)\n    at __awaiter (/app/dist/routes/webhooks.js:4:12)\n    at Object.handler (/app/dist/routes/webhooks.js:61:61)\n    at preHandlerCallback (/app/node_modules/fastify/lib/handleRequest.js:137:37)\n    at validationCompleted (/app/node_modules/fastify/lib/handleRequest.js:121:5)\n    at preValidationCallback (/app/node_modules/fastify/lib/handleRequest.js:98:5)"
    },
    "msg": "Unhandled webhook event"
}

Logs from Stripe

Response body

{
  "statusCode": 500,
  "error": "Internal Server Error",
  "message": "Unhandled webhook event"
}

Request body

{
  "id": "evt_1PsbAsDZJ8Qwumi2PPwVK8gq",
  "object": "event",
  "api_version": "2024-06-20",
  "created": 1724810394,
  "data": {
    "object": {
      "id": "pyr_1PsbAmDZJ8Qwumi2synMmGaf",
      "object": "refund",
      "amount": 103,
      "balance_transaction": "txn_1PsbAmDZJ8Qwumi2hcRVlXqn",
      "charge": "py_3Psb7zDZJ8Qwumi20vvVEtQW",
      "created": 1724810388,
      "currency": "sgd",
      "destination_details": {
        "paynow": {},
        "type": "paynow"
      },
      "metadata": {},
      "payment_intent": "pi_3Psb7zDZJ8Qwumi20lg8AyBS",
      "reason": "duplicate",
      "receipt_number": null,
      "source_transfer_reversal": null,
      "status": "succeeded",
      "transfer_reversal": null
    },
    "previous_attributes": {}
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "type": "charge.refund.updated"
}
@yinghaochan yinghaochan added the bug Something isn't working label Aug 28, 2024
@yinghaochan
Copy link
Author

this might be because the list of webhooks in the readme wasn't complete, and I thought it tried to be exhaustive.

#13 would be great to have!

@kevcodez
Copy link
Contributor

kevcodez commented Aug 28, 2024

The stripe-sync-engine does not support refunds yet, PRs are welcome though - should be fairly straight forward to add if you look at any of the supported events

The auto webhook creation won't help with unsupported events

@yinghaochan
Copy link
Author

yinghaochan commented Aug 28, 2024

@kevcodez yeah I realized that after looking a bit closer. My bad.

The full list from stripe can be gotten by pasting this into your browser console:

window.location = "https://docs.stripe.com/api/events/types" ; [...document.body.getElementsByClassName("⚙ rs12 as1a7 as17e as17d as158 as1a8 as11s ⚙oaj2dp")].map(x => x.innerText)

I'm fixing the webhook enabled_events to match the readme list now.
looks like payment_intent.partially_refunded doesn't exist. Perhaps a typo?
https://docs.stripe.com/api/events/types#event_types-payment_intent.partially_funded

after changing partially_refunded to partially_funded this update seems to work:
(postman export)

curl --location 'https://api.stripe.com//v1/webhook_endpoints/we_ENDPOINT_ID_HERE' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: BEARER TOKEN HERE' \
--data-urlencode 'enabled_events%5B%5D=charge.captured' \
--data-urlencode 'enabled_events%5B%5D=charge.expired' \
--data-urlencode 'enabled_events%5B%5D=charge.failed' \
--data-urlencode 'enabled_events%5B%5D=charge.pending' \
--data-urlencode 'enabled_events%5B%5D=charge.refunded' \
--data-urlencode 'enabled_events%5B%5D=charge.succeeded' \
--data-urlencode 'enabled_events%5B%5D=charge.updated' \
--data-urlencode 'enabled_events%5B%5D=charge.dispute.closed' \
--data-urlencode 'enabled_events%5B%5D=charge.dispute.created' \
--data-urlencode 'enabled_events%5B%5D=charge.dispute.funds_reinstated' \
--data-urlencode 'enabled_events%5B%5D=charge.dispute.funds_withdrawn' \
--data-urlencode 'enabled_events%5B%5D=charge.dispute.updated' \
--data-urlencode 'enabled_events%5B%5D=credit_note.created' \
--data-urlencode 'enabled_events%5B%5D=credit_note.updated' \
--data-urlencode 'enabled_events%5B%5D=credit_note.voided' \
--data-urlencode 'enabled_events%5B%5D=customer.created' \
--data-urlencode 'enabled_events%5B%5D=customer.deleted' \
--data-urlencode 'enabled_events%5B%5D=customer.subscription.created' \
--data-urlencode 'enabled_events%5B%5D=customer.subscription.deleted' \
--data-urlencode 'enabled_events%5B%5D=customer.subscription.paused' \
--data-urlencode 'enabled_events%5B%5D=customer.subscription.pending_update_applied' \
--data-urlencode 'enabled_events%5B%5D=customer.subscription.pending_update_expired' \
--data-urlencode 'enabled_events%5B%5D=customer.subscription.resumed' \
--data-urlencode 'enabled_events%5B%5D=customer.subscription.trial_will_end' \
--data-urlencode 'enabled_events%5B%5D=customer.subscription.updated' \
--data-urlencode 'enabled_events%5B%5D=customer.tax_id.created' \
--data-urlencode 'enabled_events%5B%5D=customer.tax_id.deleted' \
--data-urlencode 'enabled_events%5B%5D=customer.tax_id.updated' \
--data-urlencode 'enabled_events%5B%5D=customer.updated' \
--data-urlencode 'enabled_events%5B%5D=invoice.created' \
--data-urlencode 'enabled_events%5B%5D=invoice.deleted' \
--data-urlencode 'enabled_events%5B%5D=invoice.finalized' \
--data-urlencode 'enabled_events%5B%5D=invoice.finalization_failed' \
--data-urlencode 'enabled_events%5B%5D=invoice.marked_uncollectible' \
--data-urlencode 'enabled_events%5B%5D=invoice.paid' \
--data-urlencode 'enabled_events%5B%5D=invoice.payment_action_required' \
--data-urlencode 'enabled_events%5B%5D=invoice.payment_failed' \
--data-urlencode 'enabled_events%5B%5D=invoice.payment_succeeded' \
--data-urlencode 'enabled_events%5B%5D=invoice.sent' \
--data-urlencode 'enabled_events%5B%5D=invoice.upcoming' \
--data-urlencode 'enabled_events%5B%5D=invoice.updated' \
--data-urlencode 'enabled_events%5B%5D=invoice.voided' \
--data-urlencode 'enabled_events%5B%5D=payment_intent.amount_capturable_updated' \
--data-urlencode 'enabled_events%5B%5D=payment_intent.canceled' \
--data-urlencode 'enabled_events%5B%5D=payment_intent.created' \
--data-urlencode 'enabled_events%5B%5D=payment_intent.partially_funded' \
--data-urlencode 'enabled_events%5B%5D=payment_intent.payment_failed' \
--data-urlencode 'enabled_events%5B%5D=payment_intent.processing' \
--data-urlencode 'enabled_events%5B%5D=payment_intent.requires_action' \
--data-urlencode 'enabled_events%5B%5D=payment_intent.succeeded' \
--data-urlencode 'enabled_events%5B%5D=payment_method.attached' \
--data-urlencode 'enabled_events%5B%5D=payment_method.automatically_updated' \
--data-urlencode 'enabled_events%5B%5D=payment_method.detached' \
--data-urlencode 'enabled_events%5B%5D=payment_method.updated' \
--data-urlencode 'enabled_events%5B%5D=plan.created' \
--data-urlencode 'enabled_events%5B%5D=plan.deleted' \
--data-urlencode 'enabled_events%5B%5D=plan.updated' \
--data-urlencode 'enabled_events%5B%5D=price.created' \
--data-urlencode 'enabled_events%5B%5D=price.deleted' \
--data-urlencode 'enabled_events%5B%5D=price.updated' \
--data-urlencode 'enabled_events%5B%5D=product.created' \
--data-urlencode 'enabled_events%5B%5D=product.deleted' \
--data-urlencode 'enabled_events%5B%5D=product.updated' \
--data-urlencode 'enabled_events%5B%5D=setup_intent.canceled' \
--data-urlencode 'enabled_events%5B%5D=setup_intent.created' \
--data-urlencode 'enabled_events%5B%5D=setup_intent.requires_action' \
--data-urlencode 'enabled_events%5B%5D=setup_intent.setup_failed' \
--data-urlencode 'enabled_events%5B%5D=setup_intent.succeeded' \
--data-urlencode 'enabled_events%5B%5D=subscription_schedule.aborted' \
--data-urlencode 'enabled_events%5B%5D=subscription_schedule.canceled' \
--data-urlencode 'enabled_events%5B%5D=subscription_schedule.completed' \
--data-urlencode 'enabled_events%5B%5D=subscription_schedule.created' \
--data-urlencode 'enabled_events%5B%5D=subscription_schedule.expiring' \
--data-urlencode 'enabled_events%5B%5D=subscription_schedule.released' \
--data-urlencode 'enabled_events%5B%5D=subscription_schedule.updated'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants