SMOZ builds a robust Middy stack around HTTP handlers. Non‑HTTP flows bypassMiddy entirely.
App.create):
http.defaults: base options (e.g., contentType, logger)http.profiles: named profiles (options + extend/transform)app.defineFunction):
http.profile: choose one profile by namehttp.options: shallow overrideshttp.extend: append steps into phaseshttp.transform: insert/replace/remove steps by IDhttp.replace: phased arrays or a single middleware (advanced)head first in beforeserializer last in aftershape precedes serializererror-handler only in onErrorzod-before and zod-after must existChoose a profile and override content type:
app.defineFunction({
// ...
http: {
profile: 'publicJson',
options: { contentType: 'application/vnd.my+json' },
},
});
Insert a header after the response shaper:
import { insertAfter } from '@karmaniverous/smoz';
const mw = {
after: (req: any) => {
req.response.headers['X-My'] = 'yes';
},
};
app.defineFunction({
// ...
http: {
transform: ({ before, after, onError }) => ({
before,
after: insertAfter(after, 'shape', mw as any),
onError,
}),
},
});
Replace (advanced):
app.defineFunction({
// ...
http: {
replace: {
stack: {
before: [...], // include 'head' and 'zod-before' when schemas are present
after: [...], // ensure 'shape' before 'serializer'; include 'zod-after'
onError: [...], // include 'error-handler' only here
},
},
},
});