code: public function create(string $prefix, string $email, array $related): OptInTokenInterface
      {
          if ($prefix) {
              $prefix = rtrim($prefix, '-');
          }
  
          if (\strlen($prefix) > 6) {
              throw new \InvalidArgumentException('The token prefix must not be longer than 6 characters');
          }
  
          $token = bin2hex(random_bytes(12));
  
          if ($prefix) {
              $token = $prefix.'-'.substr($token, \strlen($prefix) + 1);
          }
  
          /** @var OptInModel $optIn */
          $optIn = $this->framework->createInstance(OptInModel::class);
          $optIn->tstamp = time();
          $optIn->token = $token;
          $optIn->createdOn = time();
  
          // The token is required to remove unconfirmed subscriptions after 24 hours, so
          // keep it for 3 days to make sure it is not purged before the subscription
          $optIn->removeOn = strtotime('+3 days');
          $optIn->email = $email;
          $optIn->save();
  
          $optIn->setRelatedRecords($related);
  
          return new OptInToken($optIn, $this->framework);
      }
docs: {@inheritdoc}