@@ -89,6 +89,21 @@ async fn route_request(
8989 // Extract geo info before auth check or routing consumes the request.
9090 let geo_info = GeoInfo :: from_request ( & req) ;
9191
92+ // S2S batch sync — uses Bearer auth (not EC cookies), so skip EC
93+ // context creation and the EC finalize middleware entirely.
94+ if req. get_method ( ) == Method :: POST && req. get_path ( ) == "/api/v1/sync" {
95+ let mut response = require_identity_graph ( settings)
96+ . and_then ( |kv| {
97+ require_partner_store ( settings) . and_then ( |partner_store| {
98+ let limiter = FastlyRateLimiter :: new ( RATE_COUNTER_NAME ) ;
99+ handle_batch_sync ( & kv, & partner_store, & limiter, req)
100+ } )
101+ } )
102+ . unwrap_or_else ( |e| to_error_response ( & e) ) ;
103+ finalize_response ( settings, geo_info. as_ref ( ) , & mut response) ;
104+ return Ok ( response) ;
105+ }
106+
92107 let mut ec_context =
93108 match EcContext :: read_from_request_with_geo ( settings, & req, geo_info. as_ref ( ) ) {
94109 Ok ( context) => context,
@@ -118,21 +133,6 @@ async fn route_request(
118133 let method = req. get_method ( ) . clone ( ) ;
119134
120135 // Match known routes and handle them
121- // S2S batch sync — uses Bearer auth (not EC cookies), so skip the
122- // EC finalize middleware and return directly.
123- if method == Method :: POST && path == "/api/v1/sync" {
124- let mut response = require_identity_graph ( settings)
125- . and_then ( |kv| {
126- require_partner_store ( settings) . and_then ( |partner_store| {
127- let limiter = FastlyRateLimiter :: new ( RATE_COUNTER_NAME ) ;
128- handle_batch_sync ( & kv, & partner_store, & limiter, req)
129- } )
130- } )
131- . unwrap_or_else ( |e| to_error_response ( & e) ) ;
132- finalize_response ( settings, geo_info. as_ref ( ) , & mut response) ;
133- return Ok ( response) ;
134- }
135-
136136 let result = match ( method, path. as_str ( ) ) {
137137 // Serve the tsjs library
138138 ( Method :: GET , path) if path. starts_with ( "/static/tsjs=" ) => {
0 commit comments