code: def get_token(self):
      now = int(time.time())
      if now + 60 < self.expires_at:
          return
      logger.debug("Refreshing IAM token")
      expires_at = now + 3600
      payload = {
          "aud": self.url("iam", "/tokens"),
          "iss": self.service_account["service_account_id"],
          "iat": now,
          "exp": expires_at,
      }
      jwt_token = jwt.encode(
          payload,
          self.service_account["private_key"],
          algorithm="PS256",
          headers={"kid": self.service_account["id"]},
      )
  
      resp = requests.post(payload["aud"], json={"jwt": jwt_token})
      resp.raise_for_status()
      iam_token = resp.json()["iamToken"]
      self.s.headers["Authorization"] = f"Bearer {iam_token}"
      self.expires_at = expires_at
  
imports: import time
  from typing import Dict, List, Optional
  import jwt
  import requests
  from dstack._internal.core.backends.nebius.types import ClientError, ConflictError, ForbiddenError, NebiusError, NotFoundError, ResourcesSpec, ServiceAccount
  from dstack._internal.utils.logging import get_logger
label_desc: Use image node_id 2 for calling the NebiusAPIClient obj's underlying member method code with example usage: obj.get_token() without return types