spree_admin 5.4.0.rc3 → 5.4.0.rc4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/tailwind/spree/admin/components/_forms.css +6 -1
- data/app/controllers/spree/admin/webhook_deliveries_controller.rb +8 -0
- data/app/controllers/spree/admin/webhook_endpoints_controller.rb +13 -0
- data/app/helpers/spree/admin/webhook_endpoints_helper.rb +19 -1
- data/app/views/spree/admin/tables/columns/_webhook_endpoint_health.html.erb +2 -0
- data/app/views/spree/admin/webhook_deliveries/show.html.erb +10 -0
- data/app/views/spree/admin/webhook_endpoints/_form.html.erb +2 -1
- data/app/views/spree/admin/webhook_endpoints/_summary.html.erb +16 -1
- data/app/views/spree/admin/webhook_endpoints/show.html.erb +9 -1
- data/config/initializers/spree_admin_tables.rb +20 -2
- data/config/locales/en.yml +14 -0
- data/config/routes.rb +8 -1
- metadata +7 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9750b782ff733d29c8bd3317c5ff0df08a1e00cc87e6b298bd16443aa14001ee
|
|
4
|
+
data.tar.gz: 432da97b2f3fa68dff9fd4d4402b05598aa6c9486a1b686e3de18e43d4a2bb14
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b9e635debf7dd86a93de73f055d7f78d2c66740b1cccfeb1667fce479f0d810a903f56b52065a3779859cf22cf40f95344224671b6b9a35198af5e6430f69a5e
|
|
7
|
+
data.tar.gz: 430d124d5325a384714ec73ffcbe6fd2f052e4f2b0d93a798977471b3397abba6d8f0a5c79bbe6d774a73be665c515fc16e2ac82760e636045fd2e1c38d2ee3d
|
|
@@ -76,7 +76,12 @@
|
|
|
76
76
|
@apply block mt-1 text-sm text-danger;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
/* Select */
|
|
79
|
+
/* Select — ensure text doesn't overlap the dropdown arrow */
|
|
80
|
+
.form-select,
|
|
81
|
+
.custom-select {
|
|
82
|
+
@apply pr-10;
|
|
83
|
+
}
|
|
84
|
+
|
|
80
85
|
.custom-select:disabled,
|
|
81
86
|
.custom-select[readonly],
|
|
82
87
|
.form-select:disabled,
|
|
@@ -10,6 +10,14 @@ module Spree
|
|
|
10
10
|
|
|
11
11
|
belongs_to 'spree/webhook_endpoint'
|
|
12
12
|
|
|
13
|
+
def redeliver
|
|
14
|
+
load_resource
|
|
15
|
+
authorize! :update, @object.webhook_endpoint
|
|
16
|
+
new_delivery = @object.redeliver!
|
|
17
|
+
flash[:success] = Spree.t('admin.webhook_deliveries.redelivered')
|
|
18
|
+
redirect_back(fallback_location: spree.admin_webhook_endpoint_webhook_delivery_path(@object.webhook_endpoint, new_delivery))
|
|
19
|
+
end
|
|
20
|
+
|
|
13
21
|
private
|
|
14
22
|
|
|
15
23
|
def collection_default_sort
|
|
@@ -8,6 +8,19 @@ module Spree
|
|
|
8
8
|
|
|
9
9
|
helper 'spree/admin/webhook_endpoints'
|
|
10
10
|
|
|
11
|
+
def test
|
|
12
|
+
load_resource
|
|
13
|
+
authorize! :update, @object
|
|
14
|
+
begin
|
|
15
|
+
@object.send_test!
|
|
16
|
+
flash[:success] = Spree.t('admin.webhook_endpoints.test_sent')
|
|
17
|
+
rescue StandardError => e
|
|
18
|
+
Rails.error.report(e, context: { webhook_endpoint_id: @object.id, url: @object.url })
|
|
19
|
+
flash[:error] = Spree.t('admin.webhook_endpoints.test_failed')
|
|
20
|
+
end
|
|
21
|
+
redirect_back(fallback_location: spree.admin_webhook_endpoint_path(@object))
|
|
22
|
+
end
|
|
23
|
+
|
|
11
24
|
private
|
|
12
25
|
|
|
13
26
|
def permitted_resource_params
|
|
@@ -66,15 +66,33 @@ module Spree
|
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def webhook_endpoint_success_percentage(webhook_endpoint)
|
|
69
|
-
return
|
|
69
|
+
return nil if webhook_endpoint.webhook_deliveries.none?
|
|
70
70
|
|
|
71
71
|
(webhook_endpoint.webhook_deliveries.successful.count / webhook_endpoint.webhook_deliveries.count.to_f * 100).round(2)
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
+
def webhook_endpoint_health_badge(endpoint)
|
|
75
|
+
if endpoint.auto_disabled?
|
|
76
|
+
content_tag(:span, Spree.t('admin.webhook_endpoints.health.disabled'), class: 'badge badge-danger')
|
|
77
|
+
elsif endpoint.webhook_deliveries.none?
|
|
78
|
+
content_tag(:span, Spree.t('admin.webhook_endpoints.health.no_deliveries'), class: 'badge badge-light')
|
|
79
|
+
else
|
|
80
|
+
pct = webhook_endpoint_success_percentage(endpoint)
|
|
81
|
+
if pct >= 95
|
|
82
|
+
content_tag(:span, Spree.t('admin.webhook_endpoints.health.healthy', percentage: pct), class: 'badge badge-success')
|
|
83
|
+
elsif pct >= 80
|
|
84
|
+
content_tag(:span, Spree.t('admin.webhook_endpoints.health.degraded', percentage: pct), class: 'badge badge-warning')
|
|
85
|
+
else
|
|
86
|
+
content_tag(:span, Spree.t('admin.webhook_endpoints.health.failing', percentage: pct), class: 'badge badge-danger')
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
74
91
|
private
|
|
75
92
|
|
|
76
93
|
def custom_webhook_events
|
|
77
94
|
%w[
|
|
95
|
+
customer.password_reset_requested
|
|
78
96
|
order.completed
|
|
79
97
|
order.paid
|
|
80
98
|
order.canceled
|
|
@@ -57,5 +57,15 @@
|
|
|
57
57
|
<%= code_block @webhook_delivery.response_body.truncate(2000) %>
|
|
58
58
|
<% end %>
|
|
59
59
|
|
|
60
|
+
<% if @webhook_delivery.failed? %>
|
|
61
|
+
<div class="pt-2">
|
|
62
|
+
<%= button_to Spree.t('admin.webhook_deliveries.redeliver_button'),
|
|
63
|
+
spree.redeliver_admin_webhook_endpoint_webhook_delivery_path(@webhook_delivery.webhook_endpoint, @webhook_delivery),
|
|
64
|
+
method: :post,
|
|
65
|
+
class: 'btn btn-primary w-full',
|
|
66
|
+
data: { turbo: false } %>
|
|
67
|
+
</div>
|
|
68
|
+
<% end %>
|
|
69
|
+
|
|
60
70
|
</div>
|
|
61
71
|
<% end %>
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
<h5 class="card-title"><%= Spree.t('admin.webhook_endpoints.endpoint_settings') %></h5>
|
|
4
4
|
</div>
|
|
5
5
|
<div class="card-body">
|
|
6
|
-
<%= f.spree_text_field :
|
|
6
|
+
<%= f.spree_text_field :name, placeholder: 'e.g. Storefront emails, Fulfillment service' %>
|
|
7
|
+
<%= f.spree_text_field :url, required: true, autofocus: f.object.new_record?, placeholder: 'https://example.com/webhooks' %>
|
|
7
8
|
<%= f.spree_check_box :active %>
|
|
8
9
|
</div>
|
|
9
10
|
</div>
|
|
@@ -1,6 +1,21 @@
|
|
|
1
|
+
<% if @webhook_endpoint.auto_disabled? %>
|
|
2
|
+
<div class="alert alert-danger mb-6">
|
|
3
|
+
<%= Spree.t('admin.webhook_endpoints.auto_disabled') %>
|
|
4
|
+
<%= button_to Spree.t('admin.webhook_endpoints.re_enable'), spree.admin_webhook_endpoint_path(@webhook_endpoint), method: :patch,
|
|
5
|
+
params: { webhook_endpoint: { active: true } }, class: 'btn btn-sm btn-outline-danger ms-2', data: { turbo: false } %>
|
|
6
|
+
</div>
|
|
7
|
+
<% end %>
|
|
8
|
+
|
|
1
9
|
<div class="card mb-6">
|
|
2
10
|
<div class="card-body">
|
|
3
|
-
<div class="grid grid-cols-2 lg:grid-cols-
|
|
11
|
+
<div class="grid grid-cols-2 lg:grid-cols-4 gap-6">
|
|
12
|
+
<div class="flex flex-col mb-6 lg:mb-0 border-r gap-2">
|
|
13
|
+
<span class="text-sm text-gray-500"><%= Spree.t('admin.webhook_endpoints.health_label') %></span>
|
|
14
|
+
<span class="text-lg">
|
|
15
|
+
<%= webhook_endpoint_health_badge(@webhook_endpoint) %>
|
|
16
|
+
</span>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
4
19
|
<div class="flex flex-col mb-6 lg:mb-0 border-r gap-2">
|
|
5
20
|
<span class="text-sm text-gray-500"><%= Spree.t('admin.webhook_endpoints.deliveries') %></span>
|
|
6
21
|
<span class="text-lg text-gray-900 font-bold">
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
<%= content_for :page_title do %>
|
|
2
2
|
<%= page_header_back_button(collection_url) %>
|
|
3
|
-
<%= @webhook_endpoint.url %>
|
|
3
|
+
<%= @webhook_endpoint.name.presence || @webhook_endpoint.url %>
|
|
4
|
+
<% end %>
|
|
5
|
+
|
|
6
|
+
<%= content_for :page_actions do %>
|
|
7
|
+
<%= button_to Spree.t('admin.webhook_endpoints.send_test'),
|
|
8
|
+
spree.test_admin_webhook_endpoint_path(@webhook_endpoint),
|
|
9
|
+
method: :post,
|
|
10
|
+
class: 'btn btn-light',
|
|
11
|
+
data: { turbo: false } %>
|
|
4
12
|
<% end %>
|
|
5
13
|
|
|
6
14
|
<div class="grid grid-cols-12 gap-6">
|
|
@@ -1178,11 +1178,20 @@ Rails.application.config.after_initialize do
|
|
|
1178
1178
|
# ==========================================
|
|
1179
1179
|
# Webhook Endpoints Table
|
|
1180
1180
|
# ==========================================
|
|
1181
|
-
Spree.admin.tables.register(:webhook_endpoints, model_class: Spree::WebhookEndpoint, search_param: :
|
|
1181
|
+
Spree.admin.tables.register(:webhook_endpoints, model_class: Spree::WebhookEndpoint, search_param: :name_or_url_cont, row_actions: false, link_to_action: :show)
|
|
1182
|
+
|
|
1183
|
+
Spree.admin.tables.webhook_endpoints.add :name,
|
|
1184
|
+
label: :name,
|
|
1185
|
+
type: :link,
|
|
1186
|
+
sortable: true,
|
|
1187
|
+
filterable: true,
|
|
1188
|
+
default: true,
|
|
1189
|
+
position: 5,
|
|
1190
|
+
method: ->(endpoint) { endpoint.name.presence || endpoint.url }
|
|
1182
1191
|
|
|
1183
1192
|
Spree.admin.tables.webhook_endpoints.add :url,
|
|
1184
1193
|
label: :url,
|
|
1185
|
-
type: :
|
|
1194
|
+
type: :string,
|
|
1186
1195
|
sortable: true,
|
|
1187
1196
|
filterable: true,
|
|
1188
1197
|
default: true,
|
|
@@ -1201,6 +1210,15 @@ Rails.application.config.after_initialize do
|
|
|
1201
1210
|
{ value: 'false', label: 'Inactive' }
|
|
1202
1211
|
]
|
|
1203
1212
|
|
|
1213
|
+
Spree.admin.tables.webhook_endpoints.add :health,
|
|
1214
|
+
label: 'admin.webhook_endpoints.health_label',
|
|
1215
|
+
type: :custom,
|
|
1216
|
+
sortable: false,
|
|
1217
|
+
filterable: false,
|
|
1218
|
+
default: true,
|
|
1219
|
+
position: 25,
|
|
1220
|
+
partial: 'spree/admin/tables/columns/webhook_endpoint_health'
|
|
1221
|
+
|
|
1204
1222
|
Spree.admin.tables.webhook_endpoints.add :subscriptions_count,
|
|
1205
1223
|
label: 'admin.webhook_endpoints.events',
|
|
1206
1224
|
type: :string,
|
data/config/locales/en.yml
CHANGED
|
@@ -402,11 +402,14 @@ en:
|
|
|
402
402
|
execution_time: Execution Time
|
|
403
403
|
failed: Failed
|
|
404
404
|
pending: Pending
|
|
405
|
+
redeliver_button: Redeliver
|
|
406
|
+
redelivered: Webhook redelivered successfully.
|
|
405
407
|
request_errors: Request Errors
|
|
406
408
|
request_payload: Request Payload
|
|
407
409
|
response_body: Response Body
|
|
408
410
|
response_code: Response Code
|
|
409
411
|
webhook_endpoints:
|
|
412
|
+
auto_disabled: This endpoint was automatically disabled after repeated delivery failures.
|
|
410
413
|
back_to_endpoint: Back to endpoint
|
|
411
414
|
deliveries: Deliveries
|
|
412
415
|
endpoint_settings: Endpoint Settings
|
|
@@ -414,11 +417,22 @@ en:
|
|
|
414
417
|
event_subscriptions_help: Select which events should trigger a webhook delivery to this endpoint.
|
|
415
418
|
events: events
|
|
416
419
|
failed_deliveries: Failed Deliveries
|
|
420
|
+
health:
|
|
421
|
+
degraded: "%{percentage}% success"
|
|
422
|
+
disabled: Disabled
|
|
423
|
+
failing: "%{percentage}% success"
|
|
424
|
+
healthy: "%{percentage}% success"
|
|
425
|
+
no_deliveries: No data
|
|
426
|
+
health_label: Health
|
|
417
427
|
new: New Webhook Endpoint
|
|
428
|
+
re_enable: Re-enable
|
|
418
429
|
secret_key: Secret Key
|
|
419
430
|
secret_key_help: Use this key to verify webhook signatures. Keep it secure and do not share it publicly.
|
|
431
|
+
send_test: Send Test
|
|
420
432
|
subscriptions: Subscriptions
|
|
421
433
|
successful_deliveries: Successful Deliveries
|
|
434
|
+
test_failed: Failed to send test webhook. Please check the endpoint configuration.
|
|
435
|
+
test_sent: Test webhook sent. Check deliveries for the result.
|
|
422
436
|
webhooks_subscribers:
|
|
423
437
|
all_events: All Events
|
|
424
438
|
new_webhooks_subscriber: New Webhooks Subscriber
|
data/config/routes.rb
CHANGED
|
@@ -256,7 +256,14 @@ Spree::Core::Engine.add_routes do
|
|
|
256
256
|
end
|
|
257
257
|
end
|
|
258
258
|
resources :webhook_endpoints do
|
|
259
|
-
|
|
259
|
+
member do
|
|
260
|
+
post :test
|
|
261
|
+
end
|
|
262
|
+
resources :webhook_deliveries, only: [:index, :show] do
|
|
263
|
+
member do
|
|
264
|
+
post :redeliver
|
|
265
|
+
end
|
|
266
|
+
end
|
|
260
267
|
end
|
|
261
268
|
resources :allowed_origins, except: :show
|
|
262
269
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spree_admin
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.4.0.
|
|
4
|
+
version: 5.4.0.rc4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vendo Connect Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-03-
|
|
11
|
+
date: 2026-03-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: spree
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 5.4.0.
|
|
19
|
+
version: 5.4.0.rc4
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 5.4.0.
|
|
26
|
+
version: 5.4.0.rc4
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: active_link_to
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -997,6 +997,7 @@ files:
|
|
|
997
997
|
- app/views/spree/admin/tables/columns/_webhook_deliveries_stats.html.erb
|
|
998
998
|
- app/views/spree/admin/tables/columns/_webhook_delivery_actions.html.erb
|
|
999
999
|
- app/views/spree/admin/tables/columns/_webhook_delivery_status.html.erb
|
|
1000
|
+
- app/views/spree/admin/tables/columns/_webhook_endpoint_health.html.erb
|
|
1000
1001
|
- app/views/spree/admin/tax_categories/_form.html.erb
|
|
1001
1002
|
- app/views/spree/admin/tax_categories/edit.html.erb
|
|
1002
1003
|
- app/views/spree/admin/tax_categories/index.html.erb
|
|
@@ -1169,9 +1170,9 @@ licenses:
|
|
|
1169
1170
|
- BSD-3-Clause
|
|
1170
1171
|
metadata:
|
|
1171
1172
|
bug_tracker_uri: https://github.com/spree/spree/issues
|
|
1172
|
-
changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.
|
|
1173
|
+
changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.rc4
|
|
1173
1174
|
documentation_uri: https://docs.spreecommerce.org/
|
|
1174
|
-
source_code_uri: https://github.com/spree/spree/tree/v5.4.0.
|
|
1175
|
+
source_code_uri: https://github.com/spree/spree/tree/v5.4.0.rc4
|
|
1175
1176
|
post_install_message:
|
|
1176
1177
|
rdoc_options: []
|
|
1177
1178
|
require_paths:
|