create method

McpTaskRecord create({
  1. required String? owner,
  2. required McpTaskFlavor flavor,
  3. required String method,
  4. int? requestedTtlMs,
  5. DateTime? now,
})

Create a working task. The id is 128 random bits from a secure source, so it cannot be guessed even where no owner binds it.

Implementation

McpTaskRecord create({
  required String? owner,
  required McpTaskFlavor flavor,
  required String method,
  int? requestedTtlMs,
  DateTime? now,
}) {
  purgeExpired(now: now);
  final live = _tasks.values.where((t) => t.owner == owner && !t.isTerminal).length;
  if (live >= maxTasksPerOwner) {
    throw StateError('Too many tasks in flight ($live)');
  }
  final ttl = requestedTtlMs == null
      ? defaultTtl.inMilliseconds
      : min(requestedTtlMs, maxTtl.inMilliseconds);
  final id = List.generate(16, (_) => _random.nextInt(256).toRadixString(16).padLeft(2, '0')).join();
  final record = McpTaskRecord._(id, owner, flavor, method, (now ?? DateTime.now()).toUtc(), ttl,
      pollInterval.inMilliseconds);
  _tasks[id] = record;
  return record;
}