import { HttpMiddleware, HttpServerRequest } from '@effect/platform';
import { Effect, Exit } from 'effect';
const IdempotencyMiddleware = HttpMiddleware.make((app) =>
Effect.gen(function* () {
const req = yield* HttpServerRequest.HttpServerRequest;
const idempotencyKey = req.headers['Idempotency-Key'];
if (!idempotencyKey) {
return yield* app;
}
const tx = yield* createIdempotencyTransaction(idempotencyKey);
return yield* app.pipe(
Effect.onExit(
Exit.matchEffect({
onSuccess: () => {
yield * tx.commit();
},
onFailure: () => {
yield * tx.rollback();
},
})
)
);
})
);
import { HttpMiddleware, HttpServerRequest } from '@effect/platform';
import { Effect, Exit } from 'effect';
const IdempotencyMiddleware = HttpMiddleware.make((app) =>
Effect.gen(function* () {
const req = yield* HttpServerRequest.HttpServerRequest;
const idempotencyKey = req.headers['Idempotency-Key'];
if (!idempotencyKey) {
return yield* app;
}
const tx = yield* createIdempotencyTransaction(idempotencyKey);
return yield* app.pipe(
Effect.onExit(
Exit.matchEffect({
onSuccess: () => {
yield * tx.commit();
},
onFailure: () => {
yield * tx.rollback();
},
})
)
);
})
);