usage method
Middleware
usage({
- required DVMeters meters,
- required DVMeterDefinition meter,
- required String requestIdOf(
- Object? request
Records one call against meter on the key's tenant, idempotently per
request, and stops the call when the meter does not admit it.
Implementation
Middleware usage({
required DVMeters meters,
required DVMeterDefinition meter,
required String Function(Object? request) requestIdOf,
}) => (Object? request, MiddlewareContext context) async {
final DVApiPrincipal? principal = _principalOn(context);
if (principal == null) return;
final DVMeterOutcome outcome = await principal.run(
() => meters.record(
meter,
1,
idempotencyKey: '${principal.subject}:${requestIdOf(request)}',
),
);
if (!outcome.admitted) {
context
..abort()
..data['quotaError'] = 'Quota exceeded';
if (outcome.codes.isNotEmpty) {
context.data['diagnostic'] = outcome.codes.first;
}
}
};