scalekit-sdk-python 1.0.2__tar.gz → 1.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. {scalekit_sdk_python-1.0.2/scalekit_sdk_python.egg-info → scalekit_sdk_python-1.0.3}/PKG-INFO +12 -12
  2. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/client.py +48 -20
  3. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/common/scalekit.py +10 -0
  4. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/core.py +1 -1
  5. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3/scalekit_sdk_python.egg-info}/PKG-INFO +12 -12
  6. scalekit_sdk_python-1.0.3/scalekit_sdk_python.egg-info/requires.txt +10 -0
  7. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/setup.py +12 -12
  8. scalekit_sdk_python-1.0.2/scalekit_sdk_python.egg-info/requires.txt +0 -10
  9. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/LICENSE +0 -0
  10. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/README.md +0 -0
  11. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/__init__.py +0 -0
  12. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/__init__.py +0 -0
  13. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/expression_pb2.py +0 -0
  14. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/expression_pb2.pyi +0 -0
  15. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/expression_pb2_grpc.py +0 -0
  16. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/priv/__init__.py +0 -0
  17. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/priv/private_pb2.py +0 -0
  18. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/priv/private_pb2.pyi +0 -0
  19. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/priv/private_pb2_grpc.py +0 -0
  20. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/validate_pb2.py +0 -0
  21. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/validate_pb2.pyi +0 -0
  22. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/buf/validate/validate_pb2_grpc.py +0 -0
  23. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/__init__.py +0 -0
  24. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/common/__init__.py +0 -0
  25. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/common/user.py +0 -0
  26. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/connection.py +0 -0
  27. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/constants/__init__.py +0 -0
  28. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/constants/user.py +0 -0
  29. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/domain.py +0 -0
  30. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/organization.py +0 -0
  31. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/__init__.py +0 -0
  32. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/clients/__init__.py +0 -0
  33. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/clients/clients_pb2.py +0 -0
  34. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/clients/clients_pb2.pyi +0 -0
  35. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/clients/clients_pb2_grpc.py +0 -0
  36. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/commons/__init__.py +0 -0
  37. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/commons/commons_pb2.py +0 -0
  38. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/commons/commons_pb2.pyi +0 -0
  39. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/commons/commons_pb2_grpc.py +0 -0
  40. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/connections/__init__.py +0 -0
  41. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/connections/connections_pb2.py +0 -0
  42. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/connections/connections_pb2.pyi +0 -0
  43. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/connections/connections_pb2_grpc.py +0 -0
  44. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/domains/__init__.py +0 -0
  45. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/domains/domains_pb2.py +0 -0
  46. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/domains/domains_pb2.pyi +0 -0
  47. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/domains/domains_pb2_grpc.py +0 -0
  48. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/environments/__init__.py +0 -0
  49. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/environments/environments_pb2.py +0 -0
  50. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/environments/environments_pb2.pyi +0 -0
  51. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/environments/environments_pb2_grpc.py +0 -0
  52. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/errdetails/__init__.py +0 -0
  53. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/errdetails/errdetails_pb2.py +0 -0
  54. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/errdetails/errdetails_pb2.pyi +0 -0
  55. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/errdetails/errdetails_pb2_grpc.py +0 -0
  56. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/events/__init__.py +0 -0
  57. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/events/events_pb2.py +0 -0
  58. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/events/events_pb2.pyi +0 -0
  59. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/events/events_pb2_grpc.py +0 -0
  60. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/members/__init__.py +0 -0
  61. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/members/members_pb2.py +0 -0
  62. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/members/members_pb2.pyi +0 -0
  63. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/members/members_pb2_grpc.py +0 -0
  64. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/options/__init__.py +0 -0
  65. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/options/options_pb2.py +0 -0
  66. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/options/options_pb2.pyi +0 -0
  67. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/options/options_pb2_grpc.py +0 -0
  68. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/organizations/__init__.py +0 -0
  69. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/organizations/organizations_pb2.py +0 -0
  70. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/organizations/organizations_pb2.pyi +0 -0
  71. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/organizations/organizations_pb2_grpc.py +0 -0
  72. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/user_profile_attributes/__init__.py +0 -0
  73. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/user_profile_attributes/user_profile_attributes_pb2.py +0 -0
  74. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/user_profile_attributes/user_profile_attributes_pb2.pyi +0 -0
  75. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/user_profile_attributes/user_profile_attributes_pb2_grpc.py +0 -0
  76. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/users/__init__.py +0 -0
  77. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/users/users_pb2.py +0 -0
  78. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/users/users_pb2.pyi +0 -0
  79. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/users/users_pb2_grpc.py +0 -0
  80. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/workspaces/__init__.py +0 -0
  81. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/workspaces/workspaces_pb2.py +0 -0
  82. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/workspaces/workspaces_pb2.pyi +0 -0
  83. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit/v1/workspaces/workspaces_pb2_grpc.py +0 -0
  84. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit_sdk_python.egg-info/SOURCES.txt +0 -0
  85. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit_sdk_python.egg-info/dependency_links.txt +0 -0
  86. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/scalekit_sdk_python.egg-info/top_level.txt +0 -0
  87. {scalekit_sdk_python-1.0.2 → scalekit_sdk_python-1.0.3}/setup.cfg +0 -0
@@ -1,26 +1,26 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scalekit-sdk-python
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: Scalekit official Python SDK
5
5
  Home-page: https://github.com/scalekit-inc/scalekit-sdk-python
6
6
  Author: Team Scalekit
7
- Author-email: support@grpc.com
7
+ Author-email: support@scalekit.com
8
8
  License: MIT
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: License :: OSI Approved :: MIT License
11
11
  Classifier: Operating System :: OS Independent
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: grpcio==1.64.1
15
- Requires-Dist: protobuf==5.27.0
16
- Requires-Dist: google==3.0.0
17
- Requires-Dist: requests==2.32.3
18
- Requires-Dist: PyJWT==2.8.0
19
- Requires-Dist: cryptography==42.0.8
20
- Requires-Dist: setuptools==70.3.0
21
- Requires-Dist: grpcio-status==1.64.0
22
- Requires-Dist: protoc-gen-openapiv2==0.0.1
23
- Requires-Dist: googleapis-common-protos==1.56.1
14
+ Requires-Dist: grpcio~=1.64.1
15
+ Requires-Dist: protobuf~=5.27.0
16
+ Requires-Dist: google~=3.0.0
17
+ Requires-Dist: requests~=2.32.3
18
+ Requires-Dist: PyJWT~=2.8.0
19
+ Requires-Dist: cryptography~=42.0.8
20
+ Requires-Dist: setuptools~=70.3.0
21
+ Requires-Dist: grpcio-status~=1.64.0
22
+ Requires-Dist: protoc-gen-openapiv2~=0.0.1
23
+ Requires-Dist: googleapis-common-protos~=1.56.1
24
24
 
25
25
  <p align="left">
26
26
  <a href="https://scalekit.com" target="_blank" rel="noopener noreferrer">
@@ -1,3 +1,4 @@
1
+ from typing import Any, Dict, Optional
1
2
  import json
2
3
  from urllib.parse import urlencode
3
4
 
@@ -10,6 +11,7 @@ from scalekit.common.scalekit import (
10
11
  AuthorizationUrlOptions,
11
12
  CodeAuthenticationOptions,
12
13
  GrantType,
14
+ IdpInitiatedLoginClaims,
13
15
  )
14
16
  from scalekit.constants.user import id_token_claim_to_user_map
15
17
 
@@ -60,17 +62,17 @@ class ScalekitClient:
60
62
  options.scopes if options.scopes else ["openid", "profile", "email"]
61
63
  )
62
64
  url_params_dict = {
63
- "response_type": "code",
64
- "client_id": self.core_client.client_id,
65
- "redirect_uri": redirect_uri,
66
- "scope": " ".join(scopes),
67
- "state": options.state,
68
- "nonce": options.nonce,
69
- "login_hint": options.login_hint,
70
- "domain_hint": options.domain_hint,
71
- "connection_id": options.connection_id,
72
- "organization_id": options.organization_id,
73
- "provider": options.provider,
65
+ "response_type": "code",
66
+ "client_id": self.core_client.client_id,
67
+ "redirect_uri": redirect_uri,
68
+ "scope": " ".join(scopes),
69
+ "state": options.state,
70
+ "nonce": options.nonce,
71
+ "login_hint": options.login_hint,
72
+ "domain_hint": options.domain_hint,
73
+ "connection_id": options.connection_id,
74
+ "organization_id": options.organization_id,
75
+ "provider": options.provider,
74
76
  }
75
77
 
76
78
  valid_auth_params = {k: v for k, v in url_params_dict.items() if v}
@@ -111,13 +113,8 @@ class ScalekitClient:
111
113
  response = json.loads(response.content)
112
114
  id_token = response["id_token"]
113
115
  access_token = response["access_token"]
114
-
115
- self.core_client.get_jwks()
116
- kid = jwt.get_unverified_header(id_token)["kid"]
117
- key = self.core_client.keys[kid]
118
- claims = jwt.decode(
119
- id_token, key=key, algorithms="RS256", options={"verify_aud": False}
120
- )
116
+ # Validate id_token
117
+ claims = self.__validate_token(id_token, {"verify_aud": False})
121
118
  user = {}
122
119
  for k, v in claims.items():
123
120
  if id_token_claim_to_user_map.get(k, None):
@@ -137,9 +134,40 @@ class ScalekitClient:
137
134
  :returns
138
135
  bool
139
136
  """
140
- self.core_client.get_jwks()
141
137
  try:
142
- jwt.decode(token, self.core_client.keys)
138
+ self.__validate_token(token)
143
139
  return True
144
140
  except jwt.exceptions.InvalidTokenError:
145
141
  return False
142
+
143
+ def get_idp_initiated_login_claims(self, idp_initiated_login_token: str) -> IdpInitiatedLoginClaims:
144
+ """
145
+ Method to get IDP initiated login claims
146
+
147
+ :param idp_initiated_login_token : IDP initiated login token
148
+ :type : ``` str ```
149
+ :returns
150
+ ``` IdpInitiatedLoginClaims ```
151
+ """
152
+ try:
153
+ claims = self.__validate_token(idp_initiated_login_token, {"verify_aud": False})
154
+ return claims
155
+ except Exception as exp:
156
+ raise exp
157
+
158
+ def __validate_token(
159
+ self, token: str, options: Optional[Dict] = None
160
+ ) -> Dict[str, Any]:
161
+ """
162
+ Method to validate token
163
+
164
+ :param token : token
165
+ :type : ``` str ```
166
+ :returns
167
+ payload
168
+ """
169
+ self.core_client.get_jwks()
170
+ kid = jwt.get_unverified_header(token)["kid"]
171
+ key = self.core_client.keys[kid]
172
+
173
+ return jwt.decode(token, key=key, algorithms="RS256", options=options)
@@ -48,3 +48,13 @@ class AuthenticationOptions:
48
48
  def __init__(self):
49
49
  """ """
50
50
  self.refresh_token: Optional[str] = None
51
+
52
+
53
+ class IdpInitiatedLoginClaims:
54
+ """Class definition for IDP Initiated Login Claims"""
55
+
56
+ def __init__(self) -> None:
57
+ self.connection_id: str
58
+ self.organization_id: str
59
+ self.login_hint: str
60
+ self.relay_state: Optional[str] = None
@@ -25,7 +25,7 @@ class WithCall(Protocol):
25
25
  class CoreClient:
26
26
  """Class definition for Core Client"""
27
27
 
28
- sdk_version = "Scalekit-Python/1.0.2"
28
+ sdk_version = "Scalekit-Python/1.0.3"
29
29
  api_version = "20240430"
30
30
  user_agent = f"{sdk_version} Python/{platform.python_version()} ({platform.system()}; {platform.architecture()}"
31
31
 
@@ -1,26 +1,26 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scalekit-sdk-python
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: Scalekit official Python SDK
5
5
  Home-page: https://github.com/scalekit-inc/scalekit-sdk-python
6
6
  Author: Team Scalekit
7
- Author-email: support@grpc.com
7
+ Author-email: support@scalekit.com
8
8
  License: MIT
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: License :: OSI Approved :: MIT License
11
11
  Classifier: Operating System :: OS Independent
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: grpcio==1.64.1
15
- Requires-Dist: protobuf==5.27.0
16
- Requires-Dist: google==3.0.0
17
- Requires-Dist: requests==2.32.3
18
- Requires-Dist: PyJWT==2.8.0
19
- Requires-Dist: cryptography==42.0.8
20
- Requires-Dist: setuptools==70.3.0
21
- Requires-Dist: grpcio-status==1.64.0
22
- Requires-Dist: protoc-gen-openapiv2==0.0.1
23
- Requires-Dist: googleapis-common-protos==1.56.1
14
+ Requires-Dist: grpcio~=1.64.1
15
+ Requires-Dist: protobuf~=5.27.0
16
+ Requires-Dist: google~=3.0.0
17
+ Requires-Dist: requests~=2.32.3
18
+ Requires-Dist: PyJWT~=2.8.0
19
+ Requires-Dist: cryptography~=42.0.8
20
+ Requires-Dist: setuptools~=70.3.0
21
+ Requires-Dist: grpcio-status~=1.64.0
22
+ Requires-Dist: protoc-gen-openapiv2~=0.0.1
23
+ Requires-Dist: googleapis-common-protos~=1.56.1
24
24
 
25
25
  <p align="left">
26
26
  <a href="https://scalekit.com" target="_blank" rel="noopener noreferrer">
@@ -0,0 +1,10 @@
1
+ grpcio~=1.64.1
2
+ protobuf~=5.27.0
3
+ google~=3.0.0
4
+ requests~=2.32.3
5
+ PyJWT~=2.8.0
6
+ cryptography~=42.0.8
7
+ setuptools~=70.3.0
8
+ grpcio-status~=1.64.0
9
+ protoc-gen-openapiv2~=0.0.1
10
+ googleapis-common-protos~=1.56.1
@@ -2,24 +2,24 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="scalekit-sdk-python",
5
- version="1.0.2",
5
+ version="1.0.3",
6
6
  packages=find_packages(),
7
7
  install_requires=[
8
- "grpcio==1.64.1",
9
- "protobuf==5.27.0",
10
- "google==3.0.0",
11
- "requests==2.32.3",
12
- "PyJWT==2.8.0",
13
- "cryptography==42.0.8",
14
- "setuptools==70.3.0",
15
- "grpcio-status==1.64.0",
16
- "protoc-gen-openapiv2==0.0.1",
17
- "googleapis-common-protos==1.56.1",
8
+ "grpcio~=1.64.1",
9
+ "protobuf~=5.27.0",
10
+ "google~=3.0.0",
11
+ "requests~=2.32.3",
12
+ "PyJWT~=2.8.0",
13
+ "cryptography~=42.0.8",
14
+ "setuptools~=70.3.0",
15
+ "grpcio-status~=1.64.0",
16
+ "protoc-gen-openapiv2~=0.0.1",
17
+ "googleapis-common-protos~=1.56.1",
18
18
  ],
19
19
  url="https://github.com/scalekit-inc/scalekit-sdk-python",
20
20
  license="MIT",
21
21
  author="Team Scalekit",
22
- author_email="support@grpc.com",
22
+ author_email="support@scalekit.com",
23
23
  description="Scalekit official Python SDK",
24
24
  long_description=open("README.md").read(),
25
25
  long_description_content_type="text/markdown",
@@ -1,10 +0,0 @@
1
- grpcio==1.64.1
2
- protobuf==5.27.0
3
- google==3.0.0
4
- requests==2.32.3
5
- PyJWT==2.8.0
6
- cryptography==42.0.8
7
- setuptools==70.3.0
8
- grpcio-status==1.64.0
9
- protoc-gen-openapiv2==0.0.1
10
- googleapis-common-protos==1.56.1