Skip to content

Commit 8ac4087

Browse files
[CDTOOL-1051] add get and list operations for ngwaf requests (#688)
All Submissions: * [x] Have you followed the guidelines in our Contributing document? * [x] Have you checked to ensure there aren't other open [Pull Requests](https://github.com/fastly/go-fastly/pulls) for the same update/change? <!-- You can erase any parts of this template not applicable to your Pull Request. --> ### New Feature Submissions: * [x] Does your submission pass tests?
1 parent 85c4ce1 commit 8ac4087

File tree

14 files changed

+687
-43
lines changed

14 files changed

+687
-43
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
### Breaking:
88

99
### Enhancements:
10+
- feat(ngwaf): add support for requests ([#688](https://github.com/fastly/go-fastly/pull/688))
1011
- feat(ngwaf): add support for timeseries ([#689](https://github.com/fastly/go-fastly/pull/689))
1112

1213
### Bug fixes:

fastly/errors.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ var ErrMissingIsExpired = NewFieldError("IsExpired")
109109
// requires a "RedactionID" key, but one was not set.
110110
var ErrMissingRedactionID = NewFieldError("RedactionID")
111111

112+
// ErrMissingRequestID is an error that is returned when an input struct
113+
// requires a "RequestID" key, but one was not set.
114+
var ErrMissingRequestID = NewFieldError("RequestID")
115+
116+
// ErrMissingLimit is an error that is returned when an input struct
117+
// requires a "Limit" key, but one was not set.
118+
var ErrMissingLimit = NewFieldError("Limit")
119+
112120
// ErrMissingField is an error that is returned when an input struct
113121
// requires a "Field" key, but one was not set.
114122
var ErrMissingField = NewFieldError("Field")

fastly/ngwaf/v1/events/api_response.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package events
22

3-
import "time"
3+
import (
4+
"time"
5+
6+
"github.com/fastly/go-fastly/v10/fastly/ngwaf/v1/requests"
7+
)
48

59
// Event is the API response structure for the get, list, and expire operations.
610
type Event struct {
@@ -31,7 +35,7 @@ type Event struct {
3135
// RequestCount is the total numer of requests.
3236
RequestCount int `json:"request_count"`
3337
// SampleRequest is an example of a request that triggered the event.
34-
SampleRequest map[string]any `json:"sample_request"`
38+
SampleRequest requests.Request `json:"sample_request"`
3539
// Source is the IP address of the source of the event.
3640
Source string `json:"source"`
3741
// Type is the type of event
@@ -42,7 +46,7 @@ type Event struct {
4246
Window int `json:"window"`
4347
}
4448

45-
// Reason is the reason an event was triggered.
49+
// Reason is the signal that corresponds to the reason an event was triggered.
4650
type Reason struct {
4751
// Signal ID is the ID of the signal that triggered the event
4852
SignalID string `json:"signal_id"`

fastly/ngwaf/v1/events/api_test.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,21 @@ import (
99
)
1010

1111
const (
12-
TestWorkspaceID = "WI90k86caQU0u7frYeRgsP"
13-
TestEventID = "6835c746dedf49b89d19db33"
12+
TestEventID = "6841c2c07d3691b0f5b95130"
1413
)
1514

1615
func TestClient_GetEvent(t *testing.T) {
1716
t.Parallel()
1817

1918
getEventInput := new(GetInput)
2019
getEventInput.EventID = fastly.ToPointer(TestEventID)
21-
getEventInput.WorkspaceID = fastly.ToPointer(TestWorkspaceID)
20+
getEventInput.WorkspaceID = fastly.ToPointer(fastly.TestNGWAFWorkspaceID)
2221

2322
var event *Event
2423
var err error
25-
createdAt, _ := time.Parse(time.RFC3339, "2025-05-27T14:08:03Z")
26-
detectedAt, _ := time.Parse(time.RFC3339, "2025-05-27T14:08:06Z")
27-
expiresAt, _ := time.Parse(time.RFC3339, "2025-05-27T18:42:47Z")
24+
createdAt, _ := time.Parse(time.RFC3339, "2025-06-05T16:15:58Z")
25+
detectedAt, _ := time.Parse(time.RFC3339, "2025-06-05T16:16:00Z")
26+
expiresAt, _ := time.Parse(time.RFC3339, "2025-06-05T16:20:02Z")
2827
testEvent := Event{
2928
Action: "flagged",
3029
BlockSignals: nil,
@@ -34,16 +33,16 @@ func TestClient_GetEvent(t *testing.T) {
3433
DetectedAt: detectedAt,
3534
ExpiresAt: expiresAt,
3635
EventID: TestEventID,
37-
FlaggedRequestCount: 200,
36+
FlaggedRequestCount: 0,
3837
IsExpired: true,
3938
Reasons: []Reason{
4039
{
4140
SignalID: "CMDEXE",
42-
Count: 139,
41+
Count: 97,
4342
},
4443
},
4544
RemoteHostname: "pool-96-224-50-187.nycmny.fios.verizon.net",
46-
RequestCount: 139,
45+
RequestCount: 97,
4746
Source: "96.224.50.187",
4847
Type: "attack",
4948
UserAgents: []string{
@@ -119,7 +118,7 @@ func TestClient_GetEvent(t *testing.T) {
119118

120119
var events *Events
121120
listEventInput := new(ListInput)
122-
listEventInput.WorkspaceID = fastly.ToPointer(TestWorkspaceID)
121+
listEventInput.WorkspaceID = fastly.ToPointer(fastly.TestNGWAFWorkspaceID)
123122
listEventInput.From = fastly.ToPointer("2024-05-27T14:08:03Z")
124123

125124
// get a list of events
@@ -189,7 +188,7 @@ func TestClient_GetEvent(t *testing.T) {
189188
}
190189

191190
expireEventInput := new(ExpireInput)
192-
expireEventInput.WorkspaceID = fastly.ToPointer(TestWorkspaceID)
191+
expireEventInput.WorkspaceID = fastly.ToPointer(fastly.TestNGWAFWorkspaceID)
193192
expireEventInput.EventID = fastly.ToPointer(TestEventID)
194193
expireEventInput.IsExpired = fastly.ToPointer(true)
195194

@@ -269,7 +268,7 @@ func TestClient_GetEvent_validation(t *testing.T) {
269268
t.Errorf("expected ErrMissingWorkspaceID: got %s", err)
270269
}
271270
_, err = Get(fastly.TestClient, &GetInput{
272-
WorkspaceID: fastly.ToPointer(TestWorkspaceID),
271+
WorkspaceID: fastly.ToPointer(fastly.TestNGWAFWorkspaceID),
273272
EventID: nil,
274273
})
275274
if !errors.Is(err, fastly.ErrMissingEventID) {
@@ -286,7 +285,7 @@ func TestClient_ListEvent_validation(t *testing.T) {
286285
t.Errorf("expected ErrMissingWorkspaceID: got %s", err)
287286
}
288287
_, err = List(fastly.TestClient, &ListInput{
289-
WorkspaceID: fastly.ToPointer(TestWorkspaceID),
288+
WorkspaceID: fastly.ToPointer(fastly.TestNGWAFWorkspaceID),
290289
From: nil,
291290
})
292291
if !errors.Is(err, fastly.ErrMissingFrom) {
@@ -303,15 +302,15 @@ func TestClient_ExpireEvent_validation(t *testing.T) {
303302
t.Errorf("expected ErrMissingWorkspaceID: got %s", err)
304303
}
305304
_, err = Expire(fastly.TestClient, &ExpireInput{
306-
WorkspaceID: fastly.ToPointer(TestWorkspaceID),
305+
WorkspaceID: fastly.ToPointer(fastly.TestNGWAFWorkspaceID),
307306
EventID: nil,
308307
})
309308
if !errors.Is(err, fastly.ErrMissingEventID) {
310309
t.Errorf("expected ErrMissingEventID: got %s", err)
311310
}
312311

313312
_, err = Expire(fastly.TestClient, &ExpireInput{
314-
WorkspaceID: fastly.ToPointer(TestWorkspaceID),
313+
WorkspaceID: fastly.ToPointer(fastly.TestNGWAFWorkspaceID),
315314
EventID: fastly.ToPointer(string(TestEventID)),
316315
IsExpired: nil,
317316
})

fastly/ngwaf/v1/events/fixtures/expire_event.yaml

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@ interactions:
55
body: '{"is_expired":true}'
66
form: {}
77
headers:
8+
Accept:
9+
- application/json
10+
Content-Type:
11+
- application/json
812
User-Agent:
9-
- FastlyGo/10.2.0 (+github.com/fastly/go-fastly; go1.24.2)
10-
url: https://api.fastly.com/ngwaf/v1/workspaces/WI90k86caQU0u7frYeRgsP/events/6835c746dedf49b89d19db33
13+
- FastlyGo/10.3.0 (+github.com/fastly/go-fastly; go1.24.2)
14+
url: https://api.fastly.com/ngwaf/v1/workspaces/alk6DTsYKHKucJCOIavaJM/events/6841c2c07d3691b0f5b95130
1115
method: PATCH
1216
response:
1317
body: |
14-
{"id":"6835c746dedf49b89d19db33","created_at":"2025-05-27T14:08:03Z","detected_at":"2025-05-27T14:08:06Z","source":"96.224.50.187","country":"US","remote_hostname":"pool-96-224-50-187.nycmny.fios.verizon.net","user_agents":["curl/8.7.1"],"action":"flagged","type":"attack","reasons":[{"signal_id":"CMDEXE","count":139}],"block_signals":null,"request_count":139,"blocked_request_count":0,"flagged_request_count":200,"window":60,"expires_at":"2025-05-27T18:42:47Z","is_expired":true,"sample_request":{"id":"c39aa440a65e4f37be93000000000001","timestamp":"2025-05-27T14:07:19Z","server_hostname":"ff3eb80ddda467d3d9fc2c6cbfb9fb95.com","server_name":"ff3eb80ddda467d3d9fc2c6cbfb9fb95.com","uri":"/","path":"/","user_agent":"curl/8.7.1","remote_ip":"96.224.50.187","remote_hostname":"pool-96-224-50-187.nycmny.fios.verizon.net","country":"US","method":"POST","protocol":"HTTP/1.1","tls_protocol":"","tls_cipher":"","scheme":"http","response_code":503,"response_size":19,"response_time":7,"agent_response_code":200,"request_headers":[{"name":"X-Sigsci-Client-Geo-City","value":"ossining"},{"name":"Accept","value":"*/*"},{"name":"X-Sigsci-Serviceid-Prod","value":"5bHVNvR3QwYBtF59iFkL72"},{"name":"X-Uat-Ip","value":"10.2.3.4"},{"name":"X-Sigsci-Edgemodule","value":"vcl 3.1.0"},{"name":"Fastly-Ff","value":"jjtNGp3COE7Cf2N9cZIJxo8uJocXdwD8AsyHr2Ir3HA=!EWR!cache-ewr-kewr1740056-EWR"},{"name":"Cdn-Loop","value":"Fastly"},{"name":"Content-Length","value":"22"},{"name":"Fastly-Client-Ip","value":"96.224.50.187"},{"name":"Content-Type","value":"application/x-www-form-urlencoded"},{"name":"X-Timer","value":"S1748354840.954550,VS0"},{"name":"X-Sigsci-Client-Geo-Country-Code","value":"US"},{"name":"X-Sigsci-Requestid","value":"c39aa440a65e4f37be93000000000001"},{"name":"Host","value":"ff3eb80ddda467d3d9fc2c6cbfb9fb95.com"},{"name":"X-Varnish","value":"4019989678"},{"name":"User-Agent","value":"curl/8.7.1"}],"response_headers":[{"name":"Connection","value":"keep-alive"},{"name":"Content-Type","value":"text/plain"},{"name":"Date","value":"Tue, 27 May 2025 14:07:19 GMT"},{"name":"Transfer-Encoding","value":"chunked"},{"name":"X-Cache","value":"MISS"},{"name":"X-Cache-Hits","value":"0"},{"name":"X-Served-By","value":"cache-ewr-kewr1740053-EWR"}],"signals":[{"id":"CMDEXE","location":"POST","value":"bar31=;cat /etc/passwd","detector":"CmdExeRule"},{"id":"HTTP503","location":"","value":"503","detector":"HTTPErrorRule"}],"ja3":"","ja4":"","summation":{"attrs":{},"attacks":[]}}}
18+
{"id":"6841c2c07d3691b0f5b95130","created_at":"2025-06-05T16:15:58Z","detected_at":"2025-06-05T16:16:00Z","source":"96.224.50.187","country":"US","remote_hostname":"pool-96-224-50-187.nycmny.fios.verizon.net","user_agents":["curl/8.7.1"],"action":"flagged","type":"attack","reasons":[{"signal_id":"CMDEXE","count":97}],"block_signals":null,"request_count":97,"blocked_request_count":0,"flagged_request_count":0,"window":60,"expires_at":"2025-06-05T16:20:02Z","is_expired":true,"sample_request":{"id":"2b353ef6ae3347e5b8e1000000000001","timestamp":"2025-06-05T16:15:16Z","server_hostname":"fastlydevtoolstesting.com","server_name":"fastlydevtoolstesting.com","uri":"/","path":"/","user_agent":"curl/8.7.1","remote_ip":"96.224.50.187","remote_hostname":"pool-96-224-50-187.nycmny.fios.verizon.net","country":"US","method":"POST","protocol":"HTTP/1.1","tls_protocol":"","tls_cipher":"","scheme":"http","response_code":401,"response_size":4696,"response_time":70,"agent_response_code":200,"request_headers":[{"name":"Fastly-Ff","value":"7rhL8T7Um/0khntXIHgopW0fTXKYvcj2vPpd1I+60Rc=!EWR!cache-ewr-kewr1740075-EWR"},{"name":"Accept","value":"*/*"},{"name":"Cdn-Loop","value":"Fastly"},{"name":"Content-Type","value":"application/x-www-form-urlencoded"},{"name":"X-Sigsci-Client-Geo-Country-Code","value":"US"},{"name":"Host","value":"fastlydevtoolstesting.com"},{"name":"X-Varnish","value":"2644044629"},{"name":"X-Sigsci-Serviceid-Prod","value":"kKJb5bOFI47uHeBVluGfX1"},{"name":"X-Sigsci-Client-Geo-City","value":"ossining"},{"name":"X-Sigsci-Requestid","value":"2b353ef6ae3347e5b8e1000000000001"},{"name":"Content-Length","value":"22"},{"name":"X-Uat-Ip","value":"10.2.3.4"},{"name":"User-Agent","value":"curl/8.7.1"},{"name":"X-Sigsci-Edgemodule","value":"vcl 3.1.0"},{"name":"Fastly-Client-Ip","value":"96.224.50.187"},{"name":"X-Timer","value":"S1749140117.613294,VS0"}],"response_headers":[{"name":"X-Glitch-Proxy","value":"true"},{"name":"Date","value":"Thu, 05 Jun 2025 16:15:16 GMT"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"X-Cache","value":"MISS"},{"name":"Content-Length","value":"4696"},{"name":"Connection","value":"keep-alive"},{"name":"X-Cache-Hits","value":"0"},{"name":"X-Served-By","value":"cache-ewr-kewr1740071-EWR"},{"name":"Cache-Control","value":"no-cache"},{"name":"Etag","value":"W/\"1258-L4oi8+nPFPCcbfyW0wTUanWWJ3U\""}],"signals":[{"id":"CMDEXE","location":"POST","value":"bar70=;cat /etc/passwd","detector":"CmdExeRule"},{"id":"HTTP4XX","location":"","value":"401","detector":"HTTPErrorRule"}],"ja3":"","ja4":"","summation":{"attrs":{},"attacks":[]}}}
1519
headers:
1620
Accept-Ranges:
1721
- bytes
@@ -20,11 +24,11 @@ interactions:
2024
Content-Type:
2125
- application/json
2226
Date:
23-
- Tue, 27 May 2025 18:42:48 GMT
27+
- Thu, 05 Jun 2025 16:20:03 GMT
2428
Pragma:
2529
- no-cache
2630
Server:
27-
- fastly control-gateway
31+
- fastly
2832
Strict-Transport-Security:
2933
- max-age=31536000
3034
Vary:
@@ -36,9 +40,9 @@ interactions:
3640
X-Cache-Hits:
3741
- 0, 0
3842
X-Served-By:
39-
- cache-chi-kigq8000058-CHI, cache-ewr-kewr1740091-EWR
43+
- cache-chi-klot8100150-CHI, cache-ewr-kewr1740029-EWR
4044
X-Timer:
41-
- S1748371368.843018,VS0,VE259
45+
- S1749140402.206514,VS0,VE1263
4246
status: 200 OK
4347
code: 200
4448
duration: ""

fastly/ngwaf/v1/events/fixtures/get_event.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ interactions:
66
form: {}
77
headers:
88
User-Agent:
9-
- FastlyGo/10.2.0 (+github.com/fastly/go-fastly; go1.24.2)
10-
url: https://api.fastly.com/ngwaf/v1/workspaces/WI90k86caQU0u7frYeRgsP/events/6835c746dedf49b89d19db33
9+
- FastlyGo/10.3.0 (+github.com/fastly/go-fastly; go1.24.2)
10+
url: https://api.fastly.com/ngwaf/v1/workspaces/alk6DTsYKHKucJCOIavaJM/events/6841c2c07d3691b0f5b95130
1111
method: GET
1212
response:
1313
body: |
14-
{"id":"6835c746dedf49b89d19db33","created_at":"2025-05-27T14:08:03Z","detected_at":"2025-05-27T14:08:06Z","source":"96.224.50.187","country":"US","remote_hostname":"pool-96-224-50-187.nycmny.fios.verizon.net","user_agents":["curl/8.7.1"],"action":"flagged","type":"attack","reasons":[{"signal_id":"CMDEXE","count":139}],"block_signals":null,"request_count":139,"blocked_request_count":0,"flagged_request_count":200,"window":60,"expires_at":"2025-05-27T18:42:47Z","is_expired":true,"sample_request":{"id":"c39aa440a65e4f37be93000000000001","timestamp":"2025-05-27T14:07:19Z","server_hostname":"ff3eb80ddda467d3d9fc2c6cbfb9fb95.com","server_name":"ff3eb80ddda467d3d9fc2c6cbfb9fb95.com","uri":"/","path":"/","user_agent":"curl/8.7.1","remote_ip":"96.224.50.187","remote_hostname":"pool-96-224-50-187.nycmny.fios.verizon.net","country":"US","method":"POST","protocol":"HTTP/1.1","tls_protocol":"","tls_cipher":"","scheme":"http","response_code":503,"response_size":19,"response_time":7,"agent_response_code":200,"request_headers":[{"name":"X-Sigsci-Client-Geo-City","value":"ossining"},{"name":"Accept","value":"*/*"},{"name":"X-Sigsci-Serviceid-Prod","value":"5bHVNvR3QwYBtF59iFkL72"},{"name":"X-Uat-Ip","value":"10.2.3.4"},{"name":"X-Sigsci-Edgemodule","value":"vcl 3.1.0"},{"name":"Fastly-Ff","value":"jjtNGp3COE7Cf2N9cZIJxo8uJocXdwD8AsyHr2Ir3HA=!EWR!cache-ewr-kewr1740056-EWR"},{"name":"Cdn-Loop","value":"Fastly"},{"name":"Content-Length","value":"22"},{"name":"Fastly-Client-Ip","value":"96.224.50.187"},{"name":"Content-Type","value":"application/x-www-form-urlencoded"},{"name":"X-Timer","value":"S1748354840.954550,VS0"},{"name":"X-Sigsci-Client-Geo-Country-Code","value":"US"},{"name":"X-Sigsci-Requestid","value":"c39aa440a65e4f37be93000000000001"},{"name":"Host","value":"ff3eb80ddda467d3d9fc2c6cbfb9fb95.com"},{"name":"X-Varnish","value":"4019989678"},{"name":"User-Agent","value":"curl/8.7.1"}],"response_headers":[{"name":"Connection","value":"keep-alive"},{"name":"Content-Type","value":"text/plain"},{"name":"Date","value":"Tue, 27 May 2025 14:07:19 GMT"},{"name":"Transfer-Encoding","value":"chunked"},{"name":"X-Cache","value":"MISS"},{"name":"X-Cache-Hits","value":"0"},{"name":"X-Served-By","value":"cache-ewr-kewr1740053-EWR"}],"signals":[{"id":"CMDEXE","location":"POST","value":"bar31=;cat /etc/passwd","detector":"CmdExeRule"},{"id":"HTTP503","location":"","value":"503","detector":"HTTPErrorRule"}],"ja3":"","ja4":"","summation":{"attrs":{},"attacks":[]}}}
14+
{"id":"6841c2c07d3691b0f5b95130","created_at":"2025-06-05T16:15:58Z","detected_at":"2025-06-05T16:16:00Z","source":"96.224.50.187","country":"US","remote_hostname":"pool-96-224-50-187.nycmny.fios.verizon.net","user_agents":["curl/8.7.1"],"action":"flagged","type":"attack","reasons":[{"signal_id":"CMDEXE","count":97}],"block_signals":null,"request_count":97,"blocked_request_count":0,"flagged_request_count":0,"window":60,"expires_at":"2025-06-05T16:20:02Z","is_expired":true,"sample_request":{"id":"2b353ef6ae3347e5b8e1000000000001","timestamp":"2025-06-05T16:15:16Z","server_hostname":"fastlydevtoolstesting.com","server_name":"fastlydevtoolstesting.com","uri":"/","path":"/","user_agent":"curl/8.7.1","remote_ip":"96.224.50.187","remote_hostname":"pool-96-224-50-187.nycmny.fios.verizon.net","country":"US","method":"POST","protocol":"HTTP/1.1","tls_protocol":"","tls_cipher":"","scheme":"http","response_code":401,"response_size":4696,"response_time":70,"agent_response_code":200,"request_headers":[{"name":"Fastly-Ff","value":"7rhL8T7Um/0khntXIHgopW0fTXKYvcj2vPpd1I+60Rc=!EWR!cache-ewr-kewr1740075-EWR"},{"name":"Accept","value":"*/*"},{"name":"Cdn-Loop","value":"Fastly"},{"name":"Content-Type","value":"application/x-www-form-urlencoded"},{"name":"X-Sigsci-Client-Geo-Country-Code","value":"US"},{"name":"Host","value":"fastlydevtoolstesting.com"},{"name":"X-Varnish","value":"2644044629"},{"name":"X-Sigsci-Serviceid-Prod","value":"kKJb5bOFI47uHeBVluGfX1"},{"name":"X-Sigsci-Client-Geo-City","value":"ossining"},{"name":"X-Sigsci-Requestid","value":"2b353ef6ae3347e5b8e1000000000001"},{"name":"Content-Length","value":"22"},{"name":"X-Uat-Ip","value":"10.2.3.4"},{"name":"User-Agent","value":"curl/8.7.1"},{"name":"X-Sigsci-Edgemodule","value":"vcl 3.1.0"},{"name":"Fastly-Client-Ip","value":"96.224.50.187"},{"name":"X-Timer","value":"S1749140117.613294,VS0"}],"response_headers":[{"name":"X-Glitch-Proxy","value":"true"},{"name":"Date","value":"Thu, 05 Jun 2025 16:15:16 GMT"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"X-Cache","value":"MISS"},{"name":"Content-Length","value":"4696"},{"name":"Connection","value":"keep-alive"},{"name":"X-Cache-Hits","value":"0"},{"name":"X-Served-By","value":"cache-ewr-kewr1740071-EWR"},{"name":"Cache-Control","value":"no-cache"},{"name":"Etag","value":"W/\"1258-L4oi8+nPFPCcbfyW0wTUanWWJ3U\""}],"signals":[{"id":"CMDEXE","location":"POST","value":"bar70=;cat /etc/passwd","detector":"CmdExeRule"},{"id":"HTTP4XX","location":"","value":"401","detector":"HTTPErrorRule"}],"ja3":"","ja4":"","summation":{"attrs":{},"attacks":[]}}}
1515
headers:
1616
Accept-Ranges:
1717
- bytes
@@ -20,7 +20,7 @@ interactions:
2020
Content-Type:
2121
- application/json
2222
Date:
23-
- Fri, 30 May 2025 18:37:55 GMT
23+
- Thu, 05 Jun 2025 16:33:04 GMT
2424
Pragma:
2525
- no-cache
2626
Server:
@@ -30,15 +30,15 @@ interactions:
3030
Vary:
3131
- Accept-Encoding
3232
Via:
33-
- 1.1 varnish
33+
- 1.1 varnish, 1.1 varnish
3434
X-Cache:
35-
- MISS
35+
- MISS, MISS
3636
X-Cache-Hits:
37-
- "0"
37+
- 0, 0
3838
X-Served-By:
39-
- cache-ewr-kewr1740043-EWR
39+
- cache-chi-klot8100150-CHI, cache-nyc-kteb1890056-NYC
4040
X-Timer:
41-
- S1748630275.471387,VS0,VE182
41+
- S1749141185.527635,VS0,VE471
4242
status: 200 OK
4343
code: 200
4444
duration: ""

0 commit comments

Comments
 (0)