{% extends "base.html" %} {% block title %}{{ t('webhooks.title') }} — painfree{% endblock %} {% block body %}

{{ t('webhooks.heading') }}

{{ t('webhooks.lede') }}

{# The whole reason an operator opens this page. Above the table, before any filter, and unmissable: a parked endpoint is receiving nothing. #} {% if parked %}

{{ t('webhooks.parked_heading', count=parked | length) }}

{{ t('webhooks.parked_why') }}

{% endif %}
{% if may('webhooks:manage') %} {{ t('webhooks.register') }} {% endif %}
{% if subscriptions %} {% for row in subscriptions %} {% endfor %}
{{ t('webhooks.endpoint') }}{{ t('webhooks.events') }} {{ t('common.connection') }}{{ t('webhooks.health') }} {{ t('webhooks.last_delivery') }}{{ t('webhooks.waiting') }} {{ t('webhooks.secret') }}
{{ row.url }} {% if row.description %}
{{ row.description }}{% endif %}
{{ row.subscription_id }}
{{ row.event_types | join(', ') }} {% if row.connection_id %}{{ row.connection_id }}{% else %}{{ t('common.every_connection') }}{% endif %} {{ row.health }} {% if row.consecutive_failures %}
{{ t('webhooks.exhausted', count=row.consecutive_failures) }} {% endif %}
{{ row.last_delivery_at | moment }} {% if row.last_status %}
HTTP {{ row.last_status }}{% endif %}
{{ owed[row.subscription_id] | count }} {{ t('webhooks.generation', number=row.secret_generation) }} {% if row.rotating %}
{{ t('webhooks.rotating') }}{% endif %}
{% else %}

{{ t('webhooks.empty') }}

{% endif %}
{% endblock %}