Offhand I'd do it the same way as I would manually/recording an action, using the Scripting Listener plug-in + the Clean SL script:
// Updated 10th August 2022
activeDocument.selection.selectAll();
activeDocument.quickMaskMode ^= 1;
transformSelection(0, 0, 30);
app.activeDocument.quickMaskMode ^= 1;
addLayerMask();
motionBlur(0, 25);
// Functions
function transformSelection(horizontal, vertical, width) {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var descriptor2 = new ActionDescriptor();
var reference = new ActionReference();
reference.putProperty( s2t( "channel" ), s2t( "selection" ));
descriptor.putReference( s2t( "null" ), reference );
descriptor.putEnumerated( s2t( "freeTransformCenterState" ), s2t( "quadCenterState" ), s2t( "QCSSide1" ));
descriptor2.putUnitDouble( s2t( "horizontal" ), s2t( "percentUnit" ), horizontal );
descriptor2.putUnitDouble( s2t( "vertical" ), s2t( "percentUnit" ), vertical );
descriptor.putObject( s2t( "offset" ), s2t( "offset" ), descriptor2 );
descriptor.putUnitDouble( s2t( "width" ), s2t( "percentUnit" ), width );
descriptor.putEnumerated( s2t( "interfaceIconFrameDimmed" ), s2t( "interpolationType" ), s2t( "nearestNeighbor" ));
executeAction( s2t( "transform" ), descriptor, DialogModes.NO );
}
function addLayerMask() {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
var reference = new ActionReference();
descriptor.putClass( s2t( "new" ), s2t( "channel" ));
reference.putEnumerated( s2t( "channel" ), s2t( "channel" ), s2t( "mask" ));
descriptor.putReference( s2t( "at" ), reference );
descriptor.putEnumerated( s2t( "using" ), s2t( "userMaskEnabled" ), s2t( "revealSelection" ));
executeAction( s2t( "make" ), descriptor, DialogModes.NO );
}
function motionBlur(angle, distance) {
var s2t = function (s) {
return app.stringIDToTypeID(s);
};
var descriptor = new ActionDescriptor();
descriptor.putInteger( s2t( "angle" ), angle );
descriptor.putUnitDouble( s2t( "distance" ), s2t( "pixelsUnit" ), distance );
executeAction( s2t( "motionBlur" ), descriptor, DialogModes.NO );
}
Thanks to @c.pfaffenbichler for finding the error with the transform selection code. I have added a QuickMask toggle to overcome the issue (thanks to @Kukurykus for the toggle code).