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 before
serializer
last in after
shape
precedes serializer
error-handler
only in onError
zod-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
},
},
},
});