usage method

Middleware usage({
  1. required DVMeters meters,
  2. required DVMeterDefinition meter,
  3. required String requestIdOf(
    1. 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;
    }
  }
};