@@ -22,6 +22,7 @@ import { ValidateRequest } from '../middleware/ValidateRequest';
2222import {
2323 RequirePlatform ,
2424 RequireResourceOwnership ,
25+ OptionalConnectedAccount ,
2526} from '../middleware/Authorization' ;
2627import {
2728 CreateTransferSchema ,
@@ -131,12 +132,44 @@ const requireTransferReadAccess = AsyncHandler(
131132router . post (
132133 '/' ,
133134 RequirePlatform ( ) ,
135+ OptionalConnectedAccount ( 'zoneless-account' ) ,
134136 ValidateRequest ( CreateTransferSchema ) ,
135137 AsyncHandler ( async ( req : express . Request , res : express . Response ) => {
136138 const platformAccountId = req . user . account ;
137139 const { destination } = req . body ;
138140
139- // Verify the destination account belongs to this platform
141+ // Pull funds: platform acts on behalf of connected account → platform balance
142+ if ( req . connectedAccount ) {
143+ if ( destination !== platformAccountId ) {
144+ throw new AppError (
145+ 'When using Zoneless-Account, destination must be the platform account.' ,
146+ ERRORS . INVALID_REQUEST . status ,
147+ ERRORS . INVALID_REQUEST . type
148+ ) ;
149+ }
150+
151+ Logger . info ( 'Creating pull-funds transfer' , {
152+ account : req . connectedAccount . id ,
153+ amount : req . body . amount ,
154+ destination : platformAccountId ,
155+ } ) ;
156+
157+ const transfer = await transferModule . CreateTransfer (
158+ req . connectedAccount . id ,
159+ req . body
160+ ) ;
161+
162+ Logger . info ( 'Pull-funds transfer created successfully' , {
163+ transferId : transfer . id ,
164+ amount : transfer . amount ,
165+ destination : transfer . destination ,
166+ } ) ;
167+
168+ res . status ( 201 ) . json ( transfer ) ;
169+ return ;
170+ }
171+
172+ // Add funds: platform → connected account
140173 const destinationAccount = await accountModule . GetAccount ( destination ) ;
141174
142175 if ( ! destinationAccount ) {
0 commit comments